【问题标题】:Select middle part of string MSSQL选择字符串 MSSQL 的中间部分
【发布时间】:2018-05-16 09:22:34
【问题描述】:

美好的一天

我有问题我无法修复查询以选择字符串的中间部分。

我的表格有 1000 多行和字符串,例如:

x0gdfg992|x05gjy652|t0kk2:-

我需要选择部分:x05gjy652

感谢您的意见

我无法更改输入数据。

【问题讨论】:

标签: sql sql-server database sql-server-2008


【解决方案1】:

试试这个

DECLARE @String nvarchar(100)
SET @String='x0gdfg992|x05gjy652|t0kk2'

SELECT SUBSTRING(String,0,CHARINDEX('|',String)) AS RequiredPart    
FROM
(
SELECT SUBSTRING(@String,CHARINDEX('|',@String)+1,LEN(@String)) AS String
)dt

结果,演示:http://rextester.com/OSSUS74768

RequiredPart
--------------
x05gjy652

【讨论】:

    【解决方案2】:

    一个班轮:

    declare @s nvarchar(100)
    
    SET @s = N'x0gdfg992|x05gjy652|t0kk2:-'
    
    SELECT SUBSTRING(@s, CHARINDEX('|',@s)+1, (CHARINDEX('|',@s,(CHARINDEX('|',@s)+1)))-CHARINDEX('|',@s) -1 )
    
    1. CHARINDEX('|',@s)+1 ... 找到第一个 | 的位置
    2. (CHARINDEX('|',@s,(CHARINDEX('|',@s)+1)))-CHARINDEX('|',@s) -1 ... 计算第一个 | 和第二个 | 之间的字符串所需的字符串长度。

    详细说明第二个可能令人困惑的项目:

    1. (CHARINDEX('|',@s,(CHARINDEX('|',@s)+1))) ...在第一个|之后搜索|(起点是(CHARINDEX('|',@s)+1)

    2. CHARINDEX('|',@s) ...第一个|的位置

    3. -1 ... 是排除最后一个|

    【讨论】:

      【解决方案3】:

      就个人而言,我会使用一个字符串拆分器,它给出序数位置;例如 Jeff Moden 的DelimitedSplit8K

      然后这变得微不足道:

      SELECT DS.Item
      FROM YourTable YT
           CROSS APPLY DelimitedSplit8K(YT.YourString, '|') DS
      WHERE DS.ItemNumber = 2;
      

      【讨论】:

        【解决方案4】:

        另一个选择是通过一点 XML

        示例

        Select NewValue=cast('<x>' + replace(SomeCol,'|','</x><x>')+'</x>' as xml).value('/x[2]','varchar(max)')
         From YourTable
        

        退货

        NewValue
        x05gjy652
        

        【讨论】:

          【解决方案5】:
          DECLARE @A VARCHAR(200)='x0gdfg992|x05gjy652|t0kk2',
                  @B VARCHAR(500)
          
          SELECT @B=SUBSTRING(@A,CHARINDEX('|',@A,1)+1,LEN(@A))
          SELECT 
          SUBSTRING((SUBSTRING(@A,CHARINDEX('|',@A,1)+1,LEN(@A))),1,CHARINDEX('|', 
          (SUBSTRING(@A,CHARINDEX('|',@A,1)+1,LEN(@A))),1)-1)
          

          【讨论】:

            猜你喜欢
            • 2021-12-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-24
            • 2018-09-21
            • 2014-08-01
            • 2011-08-17
            相关资源
            最近更新 更多