sql - 更新 SQL Server 中分隔符之间包含的字符串的一部分
问题描述
我必须更新一个文本列,它是一个由|
. 我想用空文本替换第二个字符串。
列值示例:
TD_DM_U100|BK_U100|TL_DM_U100||||
TD_DM_U200|BK_U200|TL_DM_L100||SOME TEXT||
TD_DM_U300|BK_U300|TL_DM_L100||SOME TEXT|MORE TEXT|
更新后的结果(去掉第二个字符串)
TD_DM_U100||TL_DM_U100||||
TD_DM_U200||TL_DM_L100||SOME TEXT||
TD_DM_U300||TL_DM_L100||SOME TEXT|MORE TEXT|
解决方案
SET NOCOUNT ON;
GO
DECLARE
@val VARCHAR(MAX);
DECLARE
@TestData TABLE
(
Id INT IDENTITY (1, 1),
Col1 VARCHAR(100)
);
DECLARE
@i INT = 1;
INSERT INTO @TestData
VALUES
(
'TD_DM_U100|BK_U100|TL_DM_U100||||'
),
(
'TD_DM_U200|BK_U200|TL_DM_L100||SOME TEXT||'
),
(
'TD_DM_U300|BK_U300|TL_DM_L100||SOME TEXT|MORE TEXT|'
);
DECLARE
@Result TABLE
(
Col1 VARCHAR(100)
);
WHILE @i <=
(
SELECT
COUNT(*)
FROM
@TestData
)
BEGIN
SET @val = NULL;
SELECT
@val = COALESCE(@val + '| ' + v.Col1, v.Col1)
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY
(
SELECT
1
)
) rn,
value
FROM
STRING_SPLIT(
(
SELECT
Col1
FROM
@TestData
WHERE
Id = @i
)
, '|')
) t1
CROSS APPLY
(
SELECT
CASE
WHEN rn = 2 THEN ''
ELSE value
END
) v (Col1);
INSERT INTO @Result
SELECT
@val;
SET @i += 1;
END;
SELECT
*
FROM
@Result;
推荐阅读
- google-cloud-platform - 尝试在 GCP 上部署 MiniKF 时出现资源级别错误
- wordpress - WordPress - 在自定义分类中允许逗号
- javascript - 在另一个旋转对象 FabricJS 中包含一个旋转对象
- sql - sql查询最新日期
- java - Java从文件中读取文本然后将其转换为莫尔斯
- java - 将 IntelliJ/Maven 项目拆分为多个组件
- task - Celery - 任务签名转换为字典并且无法调用和弦 - 在和弦的标题组中使用任务链
- javascript - Node.js 服务器不会在永远停止 0 上停止
- linux - Delphi 10.3.3 WebBroker Linux-64 - 在 linux CentOS 8 中编译时出错
- tensorflow - tensorflow 2.0 keras 训练 ImageDataGenerator + flow_from_directory + tf.data.Dataset 给出“形状”相关错误