我有一个列,其值为
1_987123
12_987654
在这里,我只需要在列值中分隔'1'
和'12'
的第一个字母。我已尝试substring
和charindex
来查找值。我使用的语法是:
substring(Columnname,1,charindex('_',Columnname,1)-1)
。
这适用于查找具有值的列。但就我而言,我们在列中有空白值。在这种情况下,上面的语法给出了错误。尝试了coalesce
这样的方案,因为列数据类型为varchar
而不接受。
你能给我一些其他选择吗?
答案 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