基本上我只需要得到一个由空格分隔的5位数字。 5位数字可以是varchar中的任何位置。
示例:我在SQL 2008表
中有一个包含此各种数据的varchar列travel visa 34322 LLL001
Coffee 34332 Jakarta
FDR001 34312 Taxi cost cash
taxi cash 34321
34556 eating dinner with customer
eating dinner 34256 with customer
visa cost 34221 REF773716637366
5位数字可以是以空格分隔的任何地方 什么是最好提取这个?
34322
34332
34312
34556
34256
34221
由于
这样的行应该返回空白
Visa refNbr 778738878
尝试以下但没有运气
SELECT pjtran.tr_comment
,substring(pjtran.tr_comment,PATINDEX('%[0-9]%',pjtran.tr_comment),5)
,Left(SubString(pjtran.tr_comment, PatIndex('%[0-9.-]%', pjtran.tr_comment), 50),PatIndex('%[^0-9.-]%', SubString(pjtran.tr_comment, PatIndex('%[0-9.-]%', pjtran.tr_comment), 50) + 'X')-1)
,len(pjtran.tr_comment)-len(replace(pjtran.tr_comment,' ',''))
我想我需要使用计算varchar中空间数的组合。以上。但我不确定该怎么做
答案 0 :(得分:4)
这样的事情怎么样?
select substring(tr_comment, patindex('%[0-9][0-9][0-9][0-9][0-9] %', tr_comment), 5) as zip5
如果你想考虑它可能在字符串的末尾:
select substring(tr_comment, patindex('%[0-9][0-9][0-9][0-9][0-9] %', tr_comment + ' '), 5
) as zip5
答案 1 :(得分:0)
使用此功能,这可能会对您有所帮助
select SUBSTRING(tr_comment, PATINDEX('%[0-9]%', tr_comment), 5) as zip
答案 2 :(得分:0)
请尝试
CREATE FUNCTION [dbo].[udf_ExtractNumberFromString]
(
@pInputString VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @OutputString varchar(MAX)=''
DECLARE @string varchar(MAX)
DECLARE @start INT
DECLARE @end INT
DECLARE @len INT
SET @string=@pInputString
--SET @string = 'the22478hollies12345TestAddressDr.789324-#345'
SET @string = replace(@string, ' ' , '')
WHILE PATINDEX('%[0-9]%',@string) <> 0
BEGIN
SET @len = len(@string)
-- PRINT @len
set @start = PATINDEX('%[0-9]%',@string)
-- PRINT @start
SET @end= PATINDEX('%[^0-9]%',SUBSTRING(@string,@start,@len-@start))
-- PRINT @end
IF @end=0
BEGIN
SET @end=@len-@start
SET @OutputString=SUBSTRING(@string,@start,@end+1)+'-'+@OutputString
BREAK
END
ELSE
BEGIN
SET @OutputString=SUBSTRING(@string,@start,@end-1)+'-'+@OutputString
SET @string=SUBSTRING(@string,@end+@start-1,@len-@end)
END
--PRINT @string
--PRINT @Output
--PRINT '---------------------'
END
IF LEN(@OutputString)>0
SET @OutputString=LEFT(@OutputString,LEN(@OutputString)-1)
--PRINT @OutputString
RETURN @OutputString
END