【问题标题】:SQL query to find substring in a column and remove certain characterSQL查询在列中查找子字符串并删除某些字符
【发布时间】:2021-04-22 14:15:49
【问题描述】:

我需要根据结果使用某个关键字查找子字符串,我需要在 SQL 中删除某些字符

例如。我有一个名为 component 的列...我需要提取此字符串之后的值:

"^BY5,3.0,133^FO73,324^B2N,,N,N,N^FV"

组件列值:

^FO41,18^A0N,46,49^FDCAT.NO.^FS^BY5,3.0,133^FO73,324^B2N,,N,N,N^FV23 MAJOR SX^FS
^FO41,18^A0N,46,49^FDCAT.NO.^FS^BY5,3.0,133^FO73,324^B2N,,N,N,N^FVTest Value for 34 Inch^FS,N

以下查询正在运行并给我一半的结果:

SELECT 
    SUBSTRING(component, CHARINDEX('^BY5,3.0,133^FO73,324^B2N,,N,N,N^FV',component) + LEN('^BY5,3.0,133^FO73,324^B2N,,N,N,N^FV'), LEN(component)) AS component 
FROM 
    Equipments 
WHERE 
    Type = 'CA'

结果:

23 MAJOR SX^FS
Test Value for 34 Inch^FS,N

我需要再次删除^ 之后的所有内容,所以我的结果应该具有正确的值

23 MAJOR SX
Test Value for 34 Inch

下面的查询给了我正确的结果“23 Major SX”,但它只针对一行。如何合并这两个查询,以便获取超过 15 条记录的列的值

SELECT LEFT("23 MAJOR SX^FS", CHARINDEX('^', "23 MAJOR SX^FS") - 1)

【问题讨论】:

    标签: sql char subquery substring


    【解决方案1】:

    您可以将第二个SUBSTRING 部分拆分为CTE 以获得所需的剩余文本,而不必在尝试删除^ 字符时使您的第一个SUBSTRING 过于复杂。

    declare @equipment table (component varchar(200)) 
    insert into @equipment 
    values ('^FO41,18^A0N,46,49^FDCAT.NO.^FS^BY5,3.0,133^FO73,324^B2N,,N,N,N^FV23 MAJOR SX^FS'),
    ('^FO41,18^A0N,46,49^FDCAT.NO.^FS^BY5,3.0,133^FO73,324^B2N,,N,N,N^FVTest Value for 34 Inch^FS,N')
    
    declare @searchString varchar(50) = '^BY5,3.0,133^FO73,324^B2N,,N,N,N^FV'
    
    ;with cte
    as (
        select SUBSTRING(component, CHARINDEX(@searchString,component) + LEN(@searchString), LEN(component)) AS component 
        from @equipment
        )
    select substring(component,1,CHARINDEX('^',component)-1)
    from cte 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      相关资源
      最近更新 更多