在Select语句中,我需要从一列中去掉前导和尾随逗号。它的值如下:
,,Value1,Value2,,,,
逗号之间没有空格。
我曾尝试使用CharIndex来查找[a-zA-Z]的第一个出现,但我不知道如何使其工作。
下面是我的代码示例:
Select CustID, SaleDate, TargetColumn, CharINDEX('a-z', TargetColumn) [Position]
[Position]列中的每一行都返回一个0。
我希望能够定位[a-zA-Z]的第一个和最后一个实例,然后分别删除这些位置之前和之后的所有内容。
我很感激以前可能有人问过这个问题,但我找不到可以在Select语句中使用的tsql代码。
如果有任何帮助/指点,我将不胜感激。
谢谢!
如果您。。。需要从一列中去掉前导和尾随逗号并且您使用SQL Server 2017+,TRIM()
是一个选项:
SELECT TRIM(',' FROM TargetColumn) AS TargetColumn
FROM (VALUES (',,Value1,Value2,,,,')) t (TargetColumn)
但是,如果您想进行更复杂的解析(如注释中所述……有问题的列在实际值之间也可以有一个逗号字符串…(,基于JSON的方法(具有适当的转换和字符串拆分(是一个可能的解决方案(需要SQL Server 2016+(。这个想法是拆分文本,删除空的子字符串,然后再次标记部分:
SELECT TargetColumn = (
SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY CONVERT(int, [key]))
FROM OPENJSON(CONCAT('["', REPLACE(TargetColumn, ',', '","'), '"]'))
WHERE [value] <> ''
)
FROM (VALUES
(',,Value1,Value2,,,,'),
('Food Resources,,,,,,,,,Department'),
('No commas')
) t (TargetColumn)
结果:
TargetColumn
-------------------------
Value1,Value2
Food Resources,Department
No commas
对于A-Z的第一次出现,您需要"PATINDEX"而不是"CHARDINDEX"。
PATINDEX('%[a-z]%' TargetColumn)
要找到最后一个位置,您可以使用
LEN(TargetColumn)-PATINDEX('%[^,]%', REVERSE(TargetColumn))