SQL 查询以在列中查找子字符串并删除特定字符

SQL query to find substring in a column and remove certain character

我需要根据结果使用特定关键字查找子字符串我需要删除 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)

您可以将第二个 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