SQL Server 2016.
我有一个看起来像这样的表:
ID Categories
1 XMDO1, EFA02, EFA04, EMDO1, XMDO2
2 EFR02, LFA02, UFA04, RMED1, XMDO1, XMDO2
3 ELR02, GFF02, XFA04, VMED1, XMDO1
Run Code Online (Sandbox Code Playgroud)
...以及2,000个类似记录,其中任何代码都可以按字符串中的任何顺序出现.
如何构造一个查询以从所有上述记录中删除XMDO1,以便生成的表看起来像这样?
ID Categories
1 EFA02, EFA04, EMDO1, XMDO2
2 EFR02, LFA02, UFA04, RMED1, XMDO2
3 ELR02, GFF02, XFA04, VMED1
Run Code Online (Sandbox Code Playgroud)
我正在猜测:
-- First pass (cases where XMD01 is not the first item):
UPDATE
tableName
SET
Categories = REPLACE( Categories, ', XMD01', '' )
-- Second pass (cases where XMD01 is the first or only item):
UPDATE
tableName
SET
Categories = REPLACE( Categories, 'XMD01', '' )
Run Code Online (Sandbox Code Playgroud)
这些可以组合:
UPDATE
tableName
SET
Categories =
REPLACE( REPLACE( Categories, ', XMD01', '' ), 'XMD01', '' )
Run Code Online (Sandbox Code Playgroud)
如果你想要一个准确的行数和可能稍快的性能,那么添加一个WHERE这样的子句(并重新格式化以便于阅读):
UPDATE
tableName
SET
Categories =
REPLACE(
REPLACE(
Categories,
', XMD01', -- Cases where XMD01 is not the first item.
''
),
'XMD01', -- Cases where XMD01 is the first or only item.
''
)
WHERE
CHARINDEX( 'XMD01', Categories ) > 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |