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