使用特殊字符

时间:2016-06-02 07:43:08

标签: sql-server

我有一个列,其值为

1_987123
12_987654

在这里,我只需要在列值中分隔'1''12'的第一个字母。我已尝试substringcharindex来查找值。我使用的语法是: substring(Columnname,1,charindex('_',Columnname,1)-1)

这适用于查找具有值的列。但就我而言,我们在列中有空白值。在这种情况下,上面的语法给出了错误。尝试了coalesce这样的方案,因为列数据类型为varchar而不接受。

你能给我一些其他选择吗?

4 个答案:

答案 0 :(得分:1)

您需要使用insertMany表达式来处理没有CASE的值:

'_'

答案 1 :(得分:1)

您可以尝试这样做,它支持空值,没有下划线的值和列中的空字符串值。

SELECT CASE 
        WHEN charindex('_', COL) > 0
            THEN substring(col, 1, charindex('_', COL) - 1)
        ELSE col
        END
FROM (
    VALUES ('1_987123')
        ,('12_987654')
        ,('12')
        ,(NULL)
        ,('')
    ) T(COL)

使用像这样的过滤器,

SELECT CASE 
        WHEN charindex('_', COL) > 0
            THEN substring(col, 1, charindex('_', COL) - 1)
        ELSE col
        END
FROM (
    VALUES ('1_987123')
        ,('12_987654')
        ,('12')
        ,(NULL)
        ,('')
        ,('3_545')
        ,('3')
    ) T(COL)
    where col like '3%'

答案 2 :(得分:1)

或者你可以通过在后面添加下划线来作弊。

SELECT LEFT (col, CHARINDEX('_', col + '_') - 1)

答案 3 :(得分:0)

你可以使用一个技巧,从位置0而不是位置1开始,不要减去1.当没有下划线时,这将返回空字符串。

SELECT 
  SUBSTRING(Columnname,0,charindex('_',Columnname,1))
FROM (values('1_987123'),('7123'),('12_987654')) x(columnname)

结果:

1

12