Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在varchar中查找5位数字?_Sql_Sql Server - Fatal编程技术网

Sql 如何在varchar中查找5位数字?

Sql 如何在varchar中查找5位数字?,sql,sql-server,Sql,Sql Server,基本上我只需要得到一个5位数的数字,用空格隔开。 5位数字可以在varchar中的任何位置 示例:我有一个varchar列,其中包含SQL 2008表中的各种数据 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

基本上我只需要得到一个5位数的数字,用空格隔开。 5位数字可以在varchar中的任何位置

示例:我有一个varchar列,其中包含SQL 2008表中的各种数据

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中的空间数。以及以上。但是我不知道怎么做

像这样的怎么样

 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

像这样的怎么样

 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

用这个,这个可能会对你有帮助

 select SUBSTRING(tr_comment, PATINDEX('%[0-9]%', tr_comment), 5) as zip

用这个,这个可能会对你有帮助

 select SUBSTRING(tr_comment, PATINDEX('%[0-9]%', tr_comment), 5) as zip
请试一试

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
创建函数[dbo]。[udf\u ExtractNumberFromString]
(
@pInputString VARCHAR(最大值)
)
返回VARCHAR(最大值)
作为
开始
声明@OutputString varchar(MAX)=“”
声明@string varchar(最大值)
声明@start INT
声明@end INT
声明@lenint
设置@string=@pInputString
--SET@string='22478空心12345测试地址dr.789324-#345'
设置@string=replace(@string,,“”)
而PATINDEX('%[0-9]]',@string)0
开始
设置@len=len(@string)
--列印
设置@start=PATINDEX(“%[0-9]]”,@string)
--打印@开始
设置@end=PATINDEX(“%[^0-9]]”,子字符串(@string,@start,@len-@start))
--打印@结束
如果@end=0
开始
设置@end=@len-@start
设置@OutputString=SUBSTRING(@string、@start、@end+1)+'-'+@OutputString
打破
结束
其他的
开始
设置@OutputString=SUBSTRING(@string、@start、@end-1)+'-'+@OutputString
设置@string=SUBSTRING(@string、@end+@start-1、@len-@end)
结束
--打印@string
--打印@输出
--打印'--------------'
结束
如果LEN(@OutputString)>0
设置@OutputString=LEFT(@OutputString,LEN(@OutputString)-1)
--打印@OutputString
返回@OutputString
结束
请试一试

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
创建函数[dbo]。[udf\u ExtractNumberFromString]
(
@pInputString VARCHAR(最大值)
)
返回VARCHAR(最大值)
作为
开始
声明@OutputString varchar(MAX)=“”
声明@string varchar(最大值)
声明@start INT
声明@end INT
声明@lenint
设置@string=@pInputString
--SET@string='22478空心12345测试地址dr.789324-#345'
设置@string=replace(@string,,“”)
而PATINDEX('%[0-9]]',@string)0
开始
设置@len=len(@string)
--列印
设置@start=PATINDEX(“%[0-9]]”,@string)
--打印@开始
设置@end=PATINDEX(“%[^0-9]]”,子字符串(@string,@start,@len-@start))
--打印@结束
如果@end=0
开始
设置@end=@len-@start
设置@OutputString=SUBSTRING(@string、@start、@end+1)+'-'+@OutputString
打破
结束
其他的
开始
设置@OutputString=SUBSTRING(@string、@start、@end-1)+'-'+@OutputString
设置@string=SUBSTRING(@string、@end+@start-1、@len-@end)
结束
--打印@string
--打印@输出
--打印'--------------'
结束
如果LEN(@OutputString)>0
设置@OutputString=LEFT(@OutputString,LEN(@OutputString)-1)
--打印@OutputString
返回@OutputString
结束

字符串中是否存在多个数字的情况?请使用自定义项查看此链接中的函数。可能重复的问题:基本上我只需要获得一个由空格分隔的5位数字。如果varchar中有一个重复的5位数字,我只得到前5位数字。例如:“出租车价格3452333564”,然后我就得到了34523。谢谢有没有出现过字符串中有多个数字的情况?请使用自定义项查看此链接中的函数。可能重复的问题:基本上我只需要得到一个由空格分隔的5位数字。如果varchar中有一个重复的5位数字,我只得到前5位数字。例如:“出租车价格3452333564”,然后我就得到了34523。谢谢