SQL - 从VARCHAR字段计算INT

时间:2015-02-06 15:56:17

标签: sql-server

我有以下情况。 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

请有人指出我错过的一件简单事吗?

2 个答案:

答案 0 :(得分:2)

如果你想获取前导整数值,你可以搜索空间并在此之前采取一切:

select left(ColumnName, charindex(' ', ColumnName) - 1)

如果您愿意,可以使用cast()将其转换为整数。

根据您的问题描述,该字段始终以整数后跟空格开头。如果某些值不是这种情况,那么您将需要使用case来验证格式。

你没有得到你想要的东西。条件的顺序错误。较长的整数与第一个条件匹配,case在那里停止。

答案 1 :(得分:1)

简单

SELECT
  CAST(SUBSTRING_INDEX((ColumnName , '-', 1))
FROM dbo.TableName