将NVARCHAR转换为INT跳过不可转换的

时间:2008-11-18 11:30:47

标签: sql-server tsql

我需要查询一个设计的数据库,以便NVARCHAR列保持客户端的年龄。我希望小组客户使用

GROUP BY age / 10 

但是当引擎遇到像'20 .10.1984'这样的字符串时(某人输入了他的bithday而不是年龄),我的查询失败了。

“坏”年龄的百分比非常小,所以我只想跳过年龄不能转换为INT的记录。

有一种简单的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

添加WHERE IsNumeric(年龄)= 1

像这样:

CREATE TABLE #temp (age NVARCHAR(20))

INSERT INTO #temp
    SELECT '22'
    UNION
SELECT '24'
    UNION
SELECT '20.10.1984'
    UNION
SELECT '50'

SELECT age/10, COUNT(*)
    FROM #temp
    WHERE ISNUMERIC(age) = 1
    GROUP BY age/10

DROP TABLE #temp