我正在使用MS SQL Server 2012,并且需要基于文本模式在单个列中批量更新varchar数据。
基本上,我的单列包含用逗号分隔的可变长度文本数据(请参见下文),并且我需要根据模式剥离一些数据。例如,我有“ ProductA-106,ProductB-107”,需要将其转换为“ ProductA,ProductB”,去掉“ -Number”文本。
你能帮我做到吗?非常感谢。
单列
ProductA-106, ProductB-107
ProductC-108, ProductD-109, ProductDA-109, ProductDB-109
ProductF-1011, ProductE-2015
单列
ProductA, ProductB
ProductC, ProductD
ProductF, ProductE
这是一个完美的示例,为什么您不想拥有这样的数据库设计。
可以解决,但这不是容易,漂亮或快速的:
创建此功能:
CREATE function dbo.f_cleanup (@a varchar(max))
returns varchar(max)
as
BEGIN
WHILE @a like '%-%'
SELECT @a = STUFF(@a, dash, comma - dash, '')
FROM
(
SELECT CHARINDEX('-', @a) dash,
CHARINDEX(',', @a + ',', CHARINDEX('-', @a)) comma
) x
RETURN @a
END
go
在这里测试:
DECLARE @t TABLE(SingleColumn varchar(100))
INSERT @t VALUES
('ProductA-106, ProductB-107'),
('ProductC-108, ProductD-109, ProductDA-109, ProductDB-109'),
('ProductF-1011, ProductE-2015')
UPDATE @t
SET SingleColumn = dbo.f_cleanup (SingleColumn)
SELECT * FROM @t
结果:
ProductA, ProductB
ProductC, ProductD, ProductDA, ProductDB
ProductF, ProductE
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句