我有以下字符串:從字符串在SQL
「FLEETWOOD DESIGNS 535353110XXXXX」(x是實際數字我只是想在這裏隱藏)
有誰知道我怎麼能搜索通過SQL中的字符串並提取更大的數字,然後可以說10個字符長?
我有以下字符串:從字符串在SQL
「FLEETWOOD DESIGNS 535353110XXXXX」(x是實際數字我只是想在這裏隱藏)
有誰知道我怎麼能搜索通過SQL中的字符串並提取更大的數字,然後可以說10個字符長?
你不提數據庫引擎,所以我們不知道是什麼功能都可以...
如果regexpressions可用,那麼像\d{10,}
模式將匹配有10個以上數字。
在MySQL REGEXP只能返回true或false(0或1),所以你不得不使用一些醜陋的黑客就像
SELECT
LEAST(
INSTR(field,'0'),
INSTR(field,'1'),
INSTR(field,'2'),
INSTR(field,'3'),
INSTR(field,'4'),
INSTR(field,'5'),
INSTR(field,'6'),
INSTR(field,'7'),
INSTR(field,'8'),
INSTR(field,'9')
) AS startPos,
REVERSE(field) AS backward,
LEAST(
INSTR(backward,'0'),
INSTR(backward,'1'),
INSTR(backward,'2'),
INSTR(backward,'3'),
INSTR(backward,'4'),
INSTR(backward,'5'),
INSTR(backward,'6'),
INSTR(backward,'7'),
INSTR(backward,'8'),
INSTR(backward,'9')
) AS endPos,
SUBSTRING(field, startPos, endPos - startPos + 1)
FROM tab
WHERE(field REGEXP '[0-9]{10,}')
但這並不是完美的 - 它會提取字符串假子比如「ABC 9 A 1234567891」,更不用說它可能是如此懶散,以至於手工傳送數據會更快。
SUBSTRING('FLEETWOOD DESIGNS 535353110XXXXX', 18, 32)
你也可以使用LEN()
獲得字符串本身的長度。如果您知道序列號的長度,您可以從結束索引中減去該序列號以獲取子字符串的起始索引。
好主意,但是這個數字可能位於字符串中的任何位置 – JBone
這是一個很老的帖子,但可能會幫助其他人。我正在尋找SQL Server
中的用戶定義函數,以僅提取給定字符串的數字,而且,令人驚訝的是我找不到我正在尋找的東西。
讓我把函數的代碼放在「從SQL中的字符串中提取數字」(適用於SQL Server
)。這是從Pinal Dave的夢幻般的博客,我已經修改它只是爲了返回NULL
是一個NULL
值傳遞給函數。
CREATE FUNCTION [dbo].[ExtractInteger](@String VARCHAR(2000))
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @Count INT
DECLARE @IntNumbers VARCHAR(1000)
SET @Count = 0
SET @IntNumbers = ''
IF @String IS NULL
RETURN NULL;
WHILE @Count <= LEN(@String)
BEGIN
IF SUBSTRING(@String,@Count,1) >= '0' AND SUBSTRING(@String,@Count,1) <= '9'
BEGIN
SET @IntNumbers = @IntNumbers + SUBSTRING(@String,@Count,1)
END
SET @Count = @Count + 1
END
RETURN @IntNumbers
END
測試
select '"' + dbo.ExtractInteger('1a2b3c4d5e6f7g8h9i') + '"'
GO
select '"' + dbo.ExtractInteger('abcdefghi') + '"'
GO
select '"' + dbo.ExtractInteger(NULL) + '"'
GO
select '"' + dbo.ExtractInteger('') + '"'
GO
結果
"123456789"
""
NULL
""
它可以像這樣
Declare @X varchar(100)
Select @X= 'Here is where15234Numbers'
--
Select @X= SubString(@X,PATINDEX('%[0-9]%',@X),Len(@X))
Select @X= SubString(@X,0,PATINDEX('%[^0-9]%',@X))
--// show result
Select @X
什麼數據庫來完成引擎你在用嗎? –
所以這些數字可能不是每次都在相同的位置? –
數字可以在任何地方,字符串會更大。我正在使用SQLSERVER 2008 – JBone