gpt4 book ai didi

sql - 从逗号分隔字符串 SQL Server 中删除值

转载 作者:行者123 更新时间:2023-12-02 03:42:13 24 4
gpt4 key购买 nike

假设我有一个逗号分隔的字符串(我知道,最好对其进行规范化,但这不是一个选项)并且记录如下所示(注意每个逗号后面的空格):

11, 15, 17, 23
15, 34, 46, 69
15
27, 41, 29, 15

我需要从所有包含“15”的值中删除它,无论位置如何。正如您所看到的,数字可以是唯一的值,位于字符串的开头、中间、末尾。完成后,我希望我的记录如下所示:

11, 17, 23
34, 46, 69

27, 41, 29

我知道我可以创建 3-4 个单独的查询来处理所有不同的情况,但我真的希望有 1 个查询。

TIA,-TS。

最佳答案

如果您绝对确定无法修复这个糟糕的数据库设计,您可以使用 CTE 执行以下操作: , REPLACE ,和 STUFF

首先,创建并填充示例表(在您以后的问题中保存此步骤):

DECLARE @T AS TABLE
(
BadColumn varchar(100)
)

INSERT INTO @T VALUES
('11, 15, 17, 23'),
('15, 34, 46, 69'),
('15'),
('27, 41, 29, 15')

然后,CTE:注意我在实际值之前和之后添加了分隔符。

;WITH CTE AS
(
SELECT REPLACE(', '+ BadColumn +', ', ', 15, ', ', ') As Without15
FROM @T
)

查询:(我使用 select 来显示结果,但您也可以使用它来更新)

SELECT ISNULL(
STUFF(
STUFF(Without15, 1, 2, ''),
LEN(Without15)-2, 2, '')
, '') As StillBadButWithout15
FROM CTE

结果:

StillBadButWithout15
11, 17, 23
34, 46, 69

27, 41, 29

See a live demo on rextester.

更新

您可以将原始列添加到cte并直接更新cte:

;WITH CTE AS
(
SELECT BadColumn, REPLACE(', '+ BadColumn +', ', ', 15, ', ', ') As Without15
FROM @T
)

UPDATE CTE
SET BadColumn = ISNULL(
STUFF(
STUFF(Without15, 1, 2, ''),
LEN(Without15)-2, 2, '')
, '')

Here is the live demo for this.

关于sql - 从逗号分隔字符串 SQL Server 中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com