PP.*_*PP. 7 sql sql-server-2005
我在表中有一个varchar(100)列,它包含整数(作为字符串)和非整数字符串的混合.例如
| dimension varchar(100) |
| '5' |
| '17' |
| '3' |
| 'Pyramids' |
| 'Western Bypass' |
| '15' |
Run Code Online (Sandbox Code Playgroud)
如何编写表达式,例如总结所有有效整数的值?如果我尝试:
-- should return 5 + 17 + 3 + 15 = 40
SELECT
SUM( CONVERT( INT, dimension ) )
FROM
mytable
Run Code Online (Sandbox Code Playgroud)
我会收到一个Conversion failed when converting the varchar value 'Pyramids' to data type int.
错误.
是否有我可以在我的表达式中使用的测试,就像ISNULL()
函数一样,如果字段不是数字,我可以指定一个默认值?
mar*_*c_s 20
试试这个:
SELECT
SUM(CASE ISNUMERIC(dimension)
WHEN 1 THEN CONVERT( INT, dimension )
ELSE 0
END)
FROM
mytable
Run Code Online (Sandbox Code Playgroud)
CASE应检查是否dimension
为数字 - 如果是,则返回该值.如果它不是数字,则返回默认值(此处:0)
您是否需要经常查询,还可以向表中添加一个持久的计算列,该列封装此计算并存储该值.这样,当求和等等时,你并不总是重新计算这个值:
ALTER TABLE mytable
ADD NumericValue AS CASE ISNUMERIC(dimension)
WHEN 1 THEN CONVERT( INT, dimension ) ELSE 0 END PERSISTED
Run Code Online (Sandbox Code Playgroud)
现在,您可以SELECT dimension, numericvalue FROM mytable
在不需要执行任何计算的情况下获取这两个值.