我有以下情况。 VARCHAR字段只能包含2个值中的1个:
'12345 - some random text'
'87654321 - some random text'
我想做的只选择INT值并使用以下查询我几乎在那里,但缺少一个关键组件:
SELECT
CASE
WHEN (ColumnName LIKE '%[0-9][0-9][0-9][0-9][0-9]%')
then SUBSTRING(ColumnName ,0 ,CHARINDEX('',ColumnName )+6)
WHEN (ColumnName LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%')
then SUBSTRING(ColumnName ,0 ,CHARINDEX('',ColumnName )+9)
ELSE (NULL) END
FROM dbo.TableName
实际结果:
12345
87654
预期结果:
12345
87654321
请有人指出我错过的一件简单事吗?
答案 0 :(得分:2)
如果你想获取前导整数值,你可以搜索空间并在此之前采取一切:
select left(ColumnName, charindex(' ', ColumnName) - 1)
如果您愿意,可以使用cast()
将其转换为整数。
根据您的问题描述,该字段始终以整数后跟空格开头。如果某些值不是这种情况,那么您将需要使用case
来验证格式。
你没有得到你想要的东西。条件的顺序错误。较长的整数与第一个条件匹配,case
在那里停止。
答案 1 :(得分:1)
简单
SELECT
CAST(SUBSTRING_INDEX((ColumnName , '-', 1))
FROM dbo.TableName