【问题标题】:Want to pull variable info from a Comments section想要从评论部分提取变量信息
【发布时间】:2015-03-11 02:12:17
【问题描述】:

我正在查询一个包含 cmets 部分的表。 cmets 部分可以包含可变长度的部件号。如果在 cmets 部分中我确保零件号用引号括起来(“partnumberA”),是否可以查询该字段以将所有内容都放在引号之间(即使零件号的长度可能不同)?

生产说明存储在 NVARCHAR 字段中。以下是一些示例数据:

2015 年 3 月 6 日(蓝光)-“3490-0001023-02”PO4670​​9 到期 3/10 (RW24718)

【问题讨论】:

  • 请提供 DDL 声明和示例数据。

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


【解决方案1】:

您可以结合使用substringcharindex 函数。

declare @Comments varchar(50)
set @Comments = '3/6/2015 (blujo) - "3490-0001023-02" PO46709 Due 3/10 (RW24718)'
select substring(@Comments,
                charindex('"',@Comments)+1,
                charindex('"',@Comments,
                    charindex('"',@Comments)+1)-charindex('"',@Comments)-1)

第一个charindex 找到第一个引号并从下一个字符开始。第二个和第三个charindex 在第一个之后查找下一个引用。

【讨论】:

    【解决方案2】:

    如果部件号的长度是标准的(比如 6 个字符),您可以随时尝试 SUBSTRINGCHARINDEX 组合:

    SELECT SUBSTRING(Comments, CHARINDEX('"', Comments) - 1, CHARINDEX('"', Comments) + 6)
    FROM Table
    

    这将在第一个双引号之前开始您的子字符串,直到找到最后一个双引号。

    【讨论】:

    • 提供的样本数据返回"3490-0001023-02" PO46709
    【解决方案3】:

    您可以使用CROSS APPLY 选择" 字符在NVARCHAR 字段中连续出现的索引。有了这些索引,您可以使用SUBSTRING 提取字段的所需部分:

    SELECT SUBSTRING(ProductionNotes, First.x + 1, Second.x - First.x - 1) 
    FROM MyTable
    CROSS APPLY (SELECT CHARINDEX('"', ProductionNotes)) AS First(x)
    CROSS APPLY (SELECT CHARINDEX('"', ProductionNotes, First.x + 1)) AS Second(x)
    

    First.x"ProductionNotes 字段中第一次出现的索引。第二次出现的位置是通过提供前一个索引 + 1,即First.x + 1,作为CHARINDEXstart_location

    【讨论】:

      【解决方案4】:

      这是一个使用变量的示例。当然,您的查询将引用一个表列:

      declare @x varchar(256) = '3/6/2015 (blujo) - "3490-0001023-02" PO46709 Due 3/10 (RW24718)';
      select
          substring(
              @x,
              charindex('"', @x) + 1, 
              charindex('"', @x, charindex('"', @x) + 1) - charindex('"', @x) - 1
         )
      

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多