sql convert不识别as别名

秋的红果实 2017-07-12 09:15:36
我期望的效果
三环1段
三环2段
三环3段
三环4段
三环5段
三环6段
三环7段
三环8段
三环9段
三环10段
三环11段
三环12段
四环1段
四环2段
四环3段
四环4段
四环5段
四环6段
四环7段
四环8段
四环9段
四环10段
四环11段
四环12段
四环13段
四环14段
四环15段

先按照X环order by,然后再按X段order by

select ……,SUBSTRING(someName,3,1)+case when ISNUMERIC(SUBSTRING(someName,4,1))=1 then SUBSTRING(someName,4,1) else '' end as Col from table order by SUBSTRING(someName,1,2),convert(int,Col) ASC

convert死活不识别Col,有什么深层原理?(只说这个问题)

……order by Col ASC可以执行,但放到convert里面就不行
...全文
386 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-07-13
  • 打赏
  • 举报
回复
引用 6 楼 From_TaiWan 的回复:
那深层原因是什么呢?我开始以为是sq执行顺序问题,但是,select先于order by执行的,order by时,已经有Col了
还不明白,要多动手去理解掌握 ORDER BY 可用别名,不可用别名再表达式,要这样用时只能用内嵌表,在把结果集生成一个别名表再去引用 或用表达式再去引用表达式 上面以提供方法,自己去动手调试
中国风 2017-07-12
  • 打赏
  • 举报
回复
ORDER BY 可直接用别名,不能用别名再用表达式,只可以直接用表达式 或用内嵌表
SELECT * 
FROM 
(select SUBSTRING(someName,3,1)+case when ISNUMERIC(SUBSTRING(someName,4,1))=1 then SUBSTRING(someName,4,1) else '' end as Col,someName from [table]) AS T
 order by SUBSTRING(someName,1,2),convert(int,Col) ASC
中国风 2017-07-12
  • 打赏
  • 举报
回复
--表达式在order by 不能用别名转换,只能用表达式
ORDER BY convert(int,SUBSTRING(someName,3,1)+case when ISNUMERIC(SUBSTRING(someName,4,1))=1 then SUBSTRING(someName,4,1) else '' END)
  • 打赏
  • 举报
回复

 select * FROM(
 COL=(SUBSTRING(someName,3,1)+case when ISNUMERIC(SUBSTRING(someName,4,1))=1 then SUBSTRING(someName,4,1) else '' end)  
 from table)T1 
 order by SUBSTRING(someName,1,2), convert(int,Col) ASC
用了别名 但是,你用convert 函数的时候还没走到那一步,所以 col是不存在的。 会报错
二月十六 2017-07-12
  • 打赏
  • 举报
回复
 SELECT CONVERT(INT,(SUBSTRING(someName, 3, 1)
        + CASE WHEN ISNUMERIC(SUBSTRING(someName, 4, 1)) = 1
               THEN SUBSTRING(someName, 4, 1)
               ELSE ''
          END)) AS Col
 FROM   table
 ORDER BY SUBSTRING(someName, 1, 2) ,
         Col ASC
  • 打赏
  • 举报
回复
select * from (select ……,SUBSTRING(someName,3,1)+case when ISNUMERIC(SUBSTRING(someName,4,1))=1 then SUBSTRING(someName,4,1) else '' end as Col from table)t order by SUBSTRING(someName,1,2),convert(int,Col) ASC
OwenZeng_DBA 2017-07-12
  • 打赏
  • 举报
回复
引用 7 楼 From_TaiWan 的回复:
难道as不是和select一起执行,是最后才加上as别名的,as是最后执行的? 我这只是猜想,没有依据
你可以把别名命名为你表中的一个字段名。具体原因可以参考下面链接: https://msdn.microsoft.com/en-us/library/ee240807(v=sql.120).aspx
秋的红果实 2017-07-12
  • 打赏
  • 举报
回复
难道as不是和select一起执行,是最后才加上as别名的,as是最后执行的? 我这只是猜想,没有依据
秋的红果实 2017-07-12
  • 打赏
  • 举报
回复
感谢几位
引用 3 楼 baidu_36457652 的回复:
用了别名 但是,你用convert 函数的时候还没走到那一步,所以 col是不存在的。 会报错
引用 5 楼 roy_88 的回复:
ORDER BY 可直接用别名,不能用别名再用表达式,只可以直接用表达式 或用内嵌表
那深层原因是什么呢?我开始以为是sq执行顺序问题,但是,select先于order by执行的,order by时,已经有Col了

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧