删除开头和结尾的逗号

时间:2018-07-26 14:54:51

标签: sql-server vb.net

我正在尝试找到一种方法来删除SELECT语句中的尾随和前导逗号。这是一些示例数据:

Sample

SELECT
    GRAIN, MATERIAL, BACKING, GRITS,
    REPLACE(LTRIM(RTRIM(REPLACE(PROPERTIES, ',', ' '))), ' ', ',') PROPERTIES,
    SPECIAL, APPLICATION, PRODUCTTYPE
FROM PRODUCTFINDER

我尝试使用trim,rtrim和ltrim,但是它们都没有更改字符串。.Idk,如果我使用了错误的语法或其他内容,但是有人可以帮我吗?

我正在使用SQL Server 2008。

4 个答案:

答案 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>PATINDEXLEFT结合使用的一种方法。

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不是处理字符串的理想场所,因此修剪逻辑应该处于编程级别

关于在查询中需要修剪特定字符的信息,请参见下面的线程

Trimming any Leading or trailing characters