C# SQL ASP.NET-如果是数字,则将nvarchar转换为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 *

我有一个名为[DBO]的nvarchar字段,其中包含数字年龄(如32)或其他nvarchar值(如未知或2013年10月12日)

我试图实现的是将[DBO]转换为int(如果它是数值的)。这是我目前拥有的代码,但显然不起作用

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