从varchar字段获取数值的SQL查询

从varchar字段获取数值的SQL查询,sql,sql-server,ssrs-2008,Sql,Sql Server,Ssrs 2008,我有一个名为Barname的列,其中包含所有项目的文本名称 所有项目的名称前都有一个数字,数字和文本之间有一个句号 e、 g 我需要创建一个新列,以允许我对数值进行排序,因此我需要的是一个命令,从名称中获取数值并忽略句号和文本 因此,我的新哥伦布(基于上述示例) 您可以使用explode(“.”,$string)创建数组,然后获取数组的第一个元素您可以使用explode(“.”,$string)创建数组,然后获取数组的第一个元素使用此表达式(在SQL中,而不是在SSRS中): 编辑,并非所有行都

我有一个名为Barname的列,其中包含所有项目的文本名称

所有项目的名称前都有一个数字,数字和文本之间有一个句号

e、 g

我需要创建一个新列,以允许我对数值进行排序,因此我需要的是一个命令,从名称中获取数值并忽略句号和文本

因此,我的新哥伦布(基于上述示例)

您可以使用explode(“.”,$string)创建数组,然后获取数组的第一个元素

您可以使用explode(“.”,$string)创建数组,然后获取数组的第一个元素

使用此表达式(在SQL中,而不是在SSRS中):

编辑,并非所有行都有点

CASE
   WHEN CHARINDEX('.', MyColumn) > 0 THEN
             CAST(LEFT(MyColumn, CHARINDEX('.', MyColumn) - 1) AS int)
   -- ELSE nothing, just let it be NULL because we can't apply the require logic
END
使用此表达式(在SQL中,而不是在SSRS中):

编辑,并非所有行都有点

CASE
   WHEN CHARINDEX('.', MyColumn) > 0 THEN
             CAST(LEFT(MyColumn, CHARINDEX('.', MyColumn) - 1) AS int)
   -- ELSE nothing, just let it be NULL because we can't apply the require logic
END
怎么样

ALTER t ADD COLUMN id INT

UPDATE t
SET id = SUBSTRING(column1, 1, CHARINDEX('.', column1) - 1)
怎么样

ALTER t ADD COLUMN id INT

UPDATE t
SET id = SUBSTRING(column1, 1, CHARINDEX('.', column1) - 1)

以下是一个完整的示例:

declare @test varchar(30)
select @test = '12.Project name one'

declare @res int

-- the command that you need is this
select @res = convert(int, substring(@test, 1, charindex('.', @test) - 1))


select @res

以下是一个完整的示例:

declare @test varchar(30)
select @test = '12.Project name one'

declare @res int

-- the command that you need is this
select @res = convert(int, substring(@test, 1, charindex('.', @test) - 1))


select @res

可能在php中可以,但在SQL中不能。可能在php中可以,但在SQL中不能。仅供参考,子字符串在SQL Server中基于1:FYI,子字符串在SQL Server中基于1:Msg 537,级别16,状态3,第2行传递给左或子字符串函数的长度参数无效。Msg 537,级别16,状态3,第2行传递给LEFT或SUBSTRING函数的长度参数无效。Msg 537,级别16,状态3,第2行传递给LEFT或SUBSTRING函数的长度参数无效。@SQL\u Surfer:这意味着您的itThanksm中有一行没有
,试图生成一个CASE语句来纠正此问题(当barname类似“%.%”和barname类似“[0-9]”时,则为(CAST(左(barname,CHARINDEX('.',barname)-1)为int))当barname类似“%.%”而barname不类似“[0-9]”时,则为0,否则为0结束)或者,您的初始表达式可以这样修改:
CAST(左(MyColumn,NULLIF)(CHARINDEX('.',MyColumn),0)-1)作为int)
(可选地将
ISNULL()应用于整个结果).Msg 537,级别16,状态3,第2行传递给LEFT或SUBSTRING函数的长度参数无效。@SQL\u Surfer:这意味着您的itThanksm中有一行没有
,正在尝试生成一个CASE语句来纠正这种情况(当barname类似于“%.%”和barname类似于“[0-9]”时为CAST(LEFT(barname,CHARINDEX(“,”,barname)-1)当barname类似于“%.%”而barname不类似于“%[0-9]%”时,则0否则0结束)或者,您的初始表达式可以这样修改:
CAST(左(MyColumn,NULLIF(CHARINDEX('.',MyColumn),0)-1)作为int)
(可选使用
ISNULL()
应用于整体结果)。