0

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

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

SELECT * FROM [PeopleTable] WHERE CAST([DBO] AS INT)=32

它总是给我一个错误,因为 [DBO] 的值不是 int。我试图使用“CASE”,但我看不到如何在我的命令中实现它。

4

5 回答 5

1

您应该能够提取所有仅数字的记录,然后进行演员表。

SELECT * 
FROM [PeopleTable] P
WHERE CAST(P.[DBO] AS INT) = 32
AND ISNUMERIC(P.[DBO]) = 1
于 2013-10-15T17:26:41.630 回答
0

看看这里: TRY_PARSE 函数(适用于 SQL Server 2012 和更新版本)

在这里: SQL Server 2005 和更新版本的 ISNUMERIC 函数

于 2013-10-15T17:25:27.173 回答
0

尝试这个:

SELECT * FROM [PeopleTable] P
WHERE ISNUMERIC(P.[DBO]) = 1) AND CAST(P.[DBO] AS INT) = 32
于 2013-10-15T17:26:18.737 回答
0

我会用

select 
    convert(int,[dbo])
from @t
where not ([dbo] like '%[^0-9]%')

如果使用ISNUMERIC,如果数据中有十进制值,则会出现错误。

于 2013-10-15T17:29:05.437 回答
0
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
于 2013-10-15T17:33:53.410 回答