GOGOxiaozhu 2012-09-06 10: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 10: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]

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

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏