代码之家  ›  专栏  ›  技术社区  ›  DKCroat

正在尝试提取两个字符“|”之间的数字

  •  0
  • DKCroat  · 技术社区  · 7 年前

    | ,示例数据为 AAA|12345678|#RRR 12345678 .

    我的代码是:

    SELECT SUBSTRING(column_name,CHARINDEX('|',column_name) + 1, CHARINDEX('|',column_name) - CHARINDEX('|',column_name) - 1)
    FROM [name].[name].[table_name]
    
    4 回复  |  直到 7 年前
        1
  •  1
  •   error_unknown    7 年前

    使用您自己的代码:

    SELECT SUBSTRING(column_name,CHARINDEX('|',column_name) + 1, 
    CHARINDEX('|',column_name) - CHARINDEX('|',column_name) - 1)
    FROM [name].[name].[table_name]
    

    SELECT SUBSTRING(column_name,CHARINDEX('|',column_name) + 1, 
    CHARINDEX('|',column_name, CHARINDEX('|',column_name)))
    FROM [name].[name].[table_name]
    

    嵌套的CHARINDEX将查找第二个管道的位置。子串将从第一个管道开始,继续到第二个管道

        2
  •  1
  •   John Cappelletti    7 年前

    XML ParseName()

    XML示例

    Declare @YourTable table (ID int,column_name varchar(max))
    Insert Into @YourTable values
    (1,'AAA|12345678|#RRR')
    
    
    Select ID
          ,SomeValue = Cast('<x>' + replace(column_name,'|','</x><x>')+'</x>' as xml).value('/x[2]','varchar(max)')
     From @YourTable
    

    Select ID
          ,SomeValue = parsename(replace(column_name,'|','.'),2)
     From @YourTable
    

    两个人都会回来

    ID  SomeValue
    1   12345678
    
        3
  •  0
  •   Gordon Linoff    7 年前

    在SQLServer中,字符串提取通常很棘手。但是,如果您只有一个数值并且正在查找它,那么代码并没有那么糟糕:

    select patindex('%[0-9]|%', str),
           substring(str, patindex('%|[0-9]%', str), patindex('%[0-9]|%', str) - patindex('%|[0-9]%', str) + 1)
    from (values ('AAA|12345678|#RRR')) v(str) 
    
        4
  •  0
  •   Yogesh Sharma    7 年前

    我会用 PARSENAME() :

    select parsename(replace(str, '|', '.'), 2)
    from ( values ('AAA|12345678|#RRR')
         ) v(str);