加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server 2005将VARCHAR转换为INT,但默认为无效类型

发布时间:2020-12-12 06:47:48 所属栏目:MsSql教程 来源:网络整理
导读:我在表中有一个varchar(100)列,它包含整数(作为字符串)和非整数字符串的混合.例如. | dimension varchar(100) || '5' || '17' || '3' || 'Pyramids' || 'Western Bypass' || '15' | 我怎样才能写一个表达式,例如总结所有有效整数的值?如果我尝试: -- should
我在表中有一个varchar(100)列,它包含整数(作为字符串)和非整数字符串的混合.例如.
| dimension varchar(100) |
| '5'                    |
| '17'                   |
| '3'                    |
| 'Pyramids'             |
| 'Western Bypass'       |
| '15'                   |

我怎样才能写一个表达式,例如总结所有有效整数的值?如果我尝试:

-- should return 5 + 17 + 3 + 15 = 40
SELECT
    SUM( CONVERT( INT,dimension ) )
FROM
    mytable

将varchar值’Pyramids’转换为数据类型int时,我会收到转换失败.错误.

是否有我可以在我的表达式中使用的测试,就像ISNULL()函数一样,如果字段不是数字,它允许我指定默认值?

解决方法

试试这个:
SELECT
    SUM(CASE ISNUMERIC(dimension) 
           WHEN 1 THEN CONVERT( INT,dimension ) 
           ELSE 0  
        END)
FROM
    mytable

CASE应检查维度是否为数字 – 如果是,则返回该值.如果它不是数字,则返回默认值(此处:0)

您是否需要经常查询,还可以向表中添加一个持久的计算列,该列封装此计算并存储该值.这样,当求和等等时,你并不总是重新计算这个值:

ALTER TABLE mytable
  ADD NumericValue AS CASE ISNUMERIC(dimension) 
      WHEN 1 THEN CONVERT( INT,dimension ) ELSE 0 END PERSISTED

现在,您可以选择维度,numericvalue FROM mytable并获取这两个值,而无需执行任何计算.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读