Sql server SQL-从VARCHAR字段计算整数
我有下面的场景。VARCHAR字段只能有2个值中的1个:Sql server SQL-从VARCHAR字段计算整数,sql-server,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(''
'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
有人能指出我缺少的一件简单的事情吗?如果要获取前导整数值,可以搜索空格并获取之前的所有内容:
select left(ColumnName, charindex(' ', ColumnName) - 1)
如果愿意,可以使用cast()
将其转换为整数
根据问题描述,字段始终以整数开头,后跟空格。如果某些值的情况并非如此,则需要使用case
验证格式
以及你没有得到你想要的东西的原因。条件的顺序不对。较长的整数与第一个条件匹配,
大小写在那里。如果要获取前导整数值,可以搜索空格并获取之前的所有内容:
select left(ColumnName, charindex(' ', ColumnName) - 1)
如果愿意,可以使用cast()
将其转换为整数
根据问题描述,字段始终以整数开头,后跟空格。如果某些值的情况并非如此,则需要使用case
验证格式
以及你没有得到你想要的东西的原因。条件的顺序不对。较长的整数与第一个条件匹配,大小写在那里。如果要获取前导整数值,可以搜索空格并获取之前的所有内容:
select left(ColumnName, charindex(' ', ColumnName) - 1)
如果愿意,可以使用cast()
将其转换为整数
根据问题描述,字段始终以整数开头,后跟空格。如果某些值的情况并非如此,则需要使用case
验证格式
以及你没有得到你想要的东西的原因。条件的顺序不对。较长的整数与第一个条件匹配,大小写在那里。如果要获取前导整数值,可以搜索空格并获取之前的所有内容:
select left(ColumnName, charindex(' ', ColumnName) - 1)
如果愿意,可以使用cast()
将其转换为整数
根据问题描述,字段始终以整数开头,后跟空格。如果某些值的情况并非如此,则需要使用case
验证格式
以及你没有得到你想要的东西的原因。条件的顺序不对。较长的整数与第一个条件匹配,大小写在那里。简单地说
SELECT
CAST(SUBSTRING_INDEX((ColumnName , '-', 1))
FROM dbo.TableName
简单地
SELECT
CAST(SUBSTRING_INDEX((ColumnName , '-', 1))
FROM dbo.TableName
简单地
SELECT
CAST(SUBSTRING_INDEX((ColumnName , '-', 1))
FROM dbo.TableName
简单地
SELECT
CAST(SUBSTRING_INDEX((ColumnName , '-', 1))
FROM dbo.TableName
直到第一个空格字符,将结果转换成整数。或者,只需切换项目顺序,最长类似于第一个……考虑重构架构。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。两个字段的方法是直接可索引的,单个字段不是。直到第一个空间字符左,将结果转换成整数。或者,只需切换项目顺序,最长类似第一次…考虑重构该模式。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。两个字段的方法是直接可索引的,单个字段不是。直到第一个空间字符左,将结果转换成整数。或者,只需切换项目顺序,最长类似第一次…考虑重构该模式。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。两个字段的方法是直接可索引的,单个字段不是。直到第一个空间字符左,将结果转换成整数。或者,只需切换项目顺序,最长类似第一次…考虑重构该模式。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。双字段方法是可直接索引的,而单字段方法则不是。