Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL-从VARCHAR字段计算整数_Sql Server - Fatal编程技术网

Sql server SQL-从VARCHAR字段计算整数

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(''

我有下面的场景。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

有人能指出我缺少的一件简单的事情吗?

如果要获取前导整数值,可以搜索空格并获取之前的所有内容:

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

直到第一个空格字符,将结果转换成整数。或者,只需切换项目顺序,最长类似于第一个……考虑重构架构。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。两个字段的方法是直接可索引的,单个字段不是。直到第一个空间字符左,将结果转换成整数。或者,只需切换项目顺序,最长类似第一次…考虑重构该模式。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。两个字段的方法是直接可索引的,单个字段不是。直到第一个空间字符左,将结果转换成整数。或者,只需切换项目顺序,最长类似第一次…考虑重构该模式。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。两个字段的方法是直接可索引的,单个字段不是。直到第一个空间字符左,将结果转换成整数。或者,只需切换项目顺序,最长类似第一次…考虑重构该模式。如果这类事情(两个数据字段打包成一个字段)经常需要分离,请将它们分成两个单独的字段。在需要时连接两个字段要比在复合字段中搜索分隔符容易得多,速度也快得多。双字段方法是可直接索引的,而单字段方法则不是。