C# SQL ASP.NET-如果是数字,则将nvarchar转换为int
我有一个名为[DBO]的nvarchar字段,其中包含数字年龄(如32)或其他nvarchar值(如未知或2013年10月12日) 我试图实现的是将[DBO]转换为int(如果它是数值的)。这是我目前拥有的代码,但显然不起作用C# SQL ASP.NET-如果是数字,则将nvarchar转换为int,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我有一个名为[DBO]的nvarchar字段,其中包含数字年龄(如32)或其他nvarchar值(如未知或2013年10月12日) 我试图实现的是将[DBO]转换为int(如果它是数值的)。这是我目前拥有的代码,但显然不起作用 SELECT * FROM [PeopleTable] WHERE CAST([DBO] AS INT)=32 由于[DBO]的值不是int,它总是给我一个错误。我试图使用“CASE”,但我看不出如何在命令中实现它。请看这里: 在这里: 试试这个: SELECT *
SELECT * FROM [PeopleTable] WHERE CAST([DBO] AS INT)=32
由于[DBO]的值不是int,它总是给我一个错误。我试图使用“CASE”,但我看不出如何在命令中实现它。请看这里:
在这里:
试试这个:
SELECT * FROM [PeopleTable] P
WHERE ISNUMERIC(P.[DBO]) = 1) AND CAST(P.[DBO] AS INT) = 32
您应该能够提取所有仅为数字的记录,然后执行强制转换
SELECT *
FROM [PeopleTable] P
WHERE CAST(P.[DBO] AS INT) = 32
AND ISNUMERIC(P.[DBO]) = 1
我会用
select
convert(int,[dbo])
from @t
where not ([dbo] like '%[^0-9]%')
如果使用
ISNUMERIC
,如果数据中有十进制值,则会出现错误。不能保证WHERE
在CONVERT
之前运行ISNUMERIC
,也不能保证在CAST
之前对ISNUMERIC
进行评估。我刚刚在SSMS中运行了它(SQL Server 2008)在特定的执行计划中观察特定的评估顺序SQL Server的哪个版本?
SELECT * FROM
(
SELECT *,
CAST((CASE isnumeric(ColumnName)
WHEN 0 THEN NULL
ELSE CAST(ColumnName AS DECIMAL(10, 2))
END) AS INT) AS ColumnName1
FROM tablename
) T
WHERE ColumnName1 = yourNumber