我正在尝试找到一种方法来删除SELECT语句中的尾随和前导逗号。这是一些示例数据:
SELECT
GRAIN, MATERIAL, BACKING, GRITS,
REPLACE(LTRIM(RTRIM(REPLACE(PROPERTIES, ',', ' '))), ' ', ',') PROPERTIES,
SPECIAL, APPLICATION, PRODUCTTYPE
FROM PRODUCTFINDER
我尝试使用trim,rtrim和ltrim,但是它们都没有更改字符串。.Idk,如果我使用了错误的语法或其他内容,但是有人可以帮我吗?
我正在使用SQL Server 2008。
答案 0 :(得分:2)
另一个选择。
这是一种非破坏性的方法,将消除任何重复的commas
并通过双管道强制进行最终清理
对于展开,缩小和消除,我选择了两个晦涩的字符†‡
示例
Declare @S varchar(max) =',,,,Some,,,,,Content,,,'
Select
replace(
replace(
replace(
replace(
replace('||,' + @S + ',||', ',', '†‡'),
'‡†', ''
),
'†‡', ','
),
'||,', ''
),
',||', ''
)
返回
Some,Content
编辑-删除了LTRIM()/ RTRIM()
答案 1 :(得分:1)
尝试一下:
SELECT
GRAIN, MATERIAL, BACKING, GRITS,
TRIM(',' FROM PRODUCTFINDER.PROPERTIES) AS PROPERTIES,
TRIM(',' FROM PRODUCTFINDER.SPECIAL) AS SPECIAL,
TRIM(',' FROM PRODUCTFINDER.APPLICATION) AS APPLICATION,
TRIM(',' FROM PRODUCTFINDER.PRODUCTTYPE) AS PRODUCTTYPE
FROM PRODUCTFINDER
我不确定要修剪哪些列。
此TRIM (Transact-SQL)的变体自SQL Server 2017起可用。
如果您具有SQL Server的早期版本,请在Font-End(VB)中执行此操作。这也使您可以在文本中间用单个逗号替换多个逗号。
Dim s = ",,,Abc,,,Def,Xyz,,,"
Console.WriteLine(Regex.Replace(s, ",{2,}", ",").Trim(","c))
打印
Abc,Def,Xyz
Regex.Replace(s, ",{2,}", ",")
使用正则表达式,{2,}
查找2个或多个逗号,并将它们替换为一个逗号。 .Trim(","c)
删除开头和结尾的逗号。
对于Regex
,您需要一个
Imports System.Text.RegularExpressions
另一个变体使用带有RemoveEmptyEntries
选项的字符串分割,然后再次将各部分连接起来以形成结果。
Dim s = ",,,Abc,,,Def,Xyz,,,"
Dim parts As String() = s.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries)
Console.WriteLine(String.Join(",", parts))
答案 2 :(得分:1)
这是将</div>
与PATINDEX
和LEFT
结合使用的一种方法。
RIGHT
只需将declare @var varchar(64)= ',,,,,,,,asdf,dsf,sdfsd,asdf,,,,,,,,'
select
left(right(@var,len(@var) - patindex('%[^,]%',@var) + 1)
,len(right(@var,len(@var) - patindex('%[^,]%',@var) + 1)) - patindex('%[^,]%',reverse(right(@var,len(@var) - patindex('%[^,]%',@var) + 1))) + 1)
更改为您的列名。
此代码通过@var
搜索不是逗号的第一个值来去除前导逗号,并将所有内容带到该字符的patindex('%[^,]%',@var)
。然后,我们使用RIGHT
删除尾随的逗号。
LEFT
答案 3 :(得分:0)
SQL Server不是处理字符串的理想场所,因此修剪逻辑应该处于编程级别
关于在查询中需要修剪特定字符的信息,请参见下面的线程