GOGOxiaozhu 2012-09-06 02:13
浏览 257
已采纳

Sql Server执行过程求教

SQL SERVER
TABLE_A
Col_ID varchar

10002

34

01

abcde

前期设计和后期需求有偏差。现在想寻找COL_ID是数字的且有数字范围参数的字段

SQL_1:
SELECT CONVERT(INT,Col_ID) COL_ID_NUM, Col_ID FROM TABLE_A WHERE ISNUMERIC(Col_ID)=1
这条语句是没有问题可以执行。

SQL_2:
SELECT * FROM (SELECT CONVERT(INT,Col_ID) COL_ID_NUM,Col_ID FROM TABLE_A WHERE ISNUMERIC(Col_ID)=1 ) A
WHERE A.COL_ID_NUM >2
这条语句就报错了,说 字段COD_ID中abcde转换成INT错误。

按照我的理解SQL_2中
先执行SELECT CONVERT(INT,Col_ID) COL_ID_NUM, Col_ID FROM TABLE_A WHERE ISNUMERIC(Col_ID)=1 并生成临时表V1,然后在V1中执行COL_ID_NUM >2。这样应该已经把COL_ID=abcde删除掉了。

请大牛指点。谢谢

  • 写回答

1条回答 默认 最新

  • liuyinhuan0409 2012-09-06 02:22
    关注

    按道理就是你理解的那样呀,应该是先执行子查询再去做>2的筛选。。。
    如果你的SQL_1确实没错,那你不妨改成这样不用子查询:
    [code="sql"]
    SELECT CONVERT(INT, Col_ID) COL_ID_NUM, Col_ID
    FROM TABLE_A
    WHERE ISNUMERIC(Col_ID) = 1
    and CONVERT(INT, Col_ID) > 2
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部