SQL排序

tangwwip 2017-01-05 11:49:50


select monitor.MonitorType,ServerAddress,monitor.MonitorValue from monitor,equipment where monitor.EquipmentId=equipment.RecId and monitor.MonitorType = 'SnmpUpTime' and monitor.MonitorStatus = 'good' order by convert(substring_index(substring_index(MonitorValue , ',' ,1), '=' , -1), DECIMAL(9, 2)) desc limit 10

写一个根据MonitorValue排序的SQL语句,MonitorValue是运行时间 这样写有一些小错误,问下要怎么改正 重新写也行
...全文
597 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangwwip 2017-01-07
  • 打赏
  • 举报
回复
已经解决了,谢谢大家了
tangwwip 2017-01-06
  • 打赏
  • 举报
回复
引用 10 楼 yuxiangaaaaa 的回复:
[quote=引用 9 楼 yuxiangaaaaa 的回复:]
[quote=引用 8 楼 tangwwip 的回复:]
[quote=引用 7 楼 yuxiangaaaaa 的回复:]
用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序

我在sql里面就要转换,然后排序啊[/quote]

sql里也有replace方法的,跟JAVA里的用法一样[/quote]
select replace(MonitorValue,'=','') from monitor[/quote]

还不是我要的效果
自由自在_Yu 2017-01-06
  • 打赏
  • 举报
回复
引用 9 楼 yuxiangaaaaa 的回复:
[quote=引用 8 楼 tangwwip 的回复:] [quote=引用 7 楼 yuxiangaaaaa 的回复:] 用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序
我在sql里面就要转换,然后排序啊[/quote] sql里也有replace方法的,跟JAVA里的用法一样[/quote] select replace(MonitorValue,'=','') from monitor
自由自在_Yu 2017-01-06
  • 打赏
  • 举报
回复
引用 8 楼 tangwwip 的回复:
[quote=引用 7 楼 yuxiangaaaaa 的回复:] 用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序
我在sql里面就要转换,然后排序啊[/quote] sql里也有replace方法的,跟JAVA里的用法一样
tangwwip 2017-01-06
  • 打赏
  • 举报
回复
引用 7 楼 yuxiangaaaaa 的回复:
用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序
我在sql里面就要转换,然后排序啊
yuqi_hz 2017-01-06
  • 打赏
  • 举报
回复
排序行是一个字符串,而且看格式应该是插入前计算出来的,你要的应该是插入的日期+时间,当前时间坚强days前面的数字,再加上后面的时间,要不没法排序
红尘依旧 2017-01-06
  • 打赏
  • 举报
回复
sql不好写,MonitorValue并不是一个单纯的时间格式,是一个字符串,建议直接查询出来了,在代码里面写一个排序要好的多
自由自在_Yu 2017-01-06
  • 打赏
  • 举报
回复
引用 13 楼 yuxiangaaaaa 的回复:
[quote=引用 11 楼 tangwwip 的回复:] [quote=引用 10 楼 yuxiangaaaaa 的回复:] [quote=引用 9 楼 yuxiangaaaaa 的回复:] [quote=引用 8 楼 tangwwip 的回复:] [quote=引用 7 楼 yuxiangaaaaa 的回复:] 用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序
我在sql里面就要转换,然后排序啊[/quote] sql里也有replace方法的,跟JAVA里的用法一样[/quote] select replace(MonitorValue,'=','') from monitor[/quote] 还不是我要的效果 [/quote] 把非数字的都替换掉就是你要的效果了,没有替换完[/quote] UPTIME = 和“:”都替换掉
自由自在_Yu 2017-01-06
  • 打赏
  • 举报
回复
引用 11 楼 tangwwip 的回复:
[quote=引用 10 楼 yuxiangaaaaa 的回复:] [quote=引用 9 楼 yuxiangaaaaa 的回复:] [quote=引用 8 楼 tangwwip 的回复:] [quote=引用 7 楼 yuxiangaaaaa 的回复:] 用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序
我在sql里面就要转换,然后排序啊[/quote] sql里也有replace方法的,跟JAVA里的用法一样[/quote] select replace(MonitorValue,'=','') from monitor[/quote] 还不是我要的效果 [/quote] 把非数字的都替换掉就是你要的效果了,没有替换完
自由自在_Yu 2017-01-05
  • 打赏
  • 举报
回复
用replace(str,'a','b'); 把UPTIME = days : 都替换成空串,就剩下数字了,可以排序
tangwwip 2017-01-05
  • 打赏
  • 举报
回复
引用 2 楼 kahnyy5202015 的回复:
想法把时间转为秒,再排序。。。
在sql里转?
tangwwip 2017-01-05
  • 打赏
  • 举报
回复
引用 3 楼 yuxiangaaaaa 的回复:
两张表是什么样的?原始数据是什么样的?需要什么结果?你的语句时报错了,还是没错,查的结果不满意? 你说的不清不楚的,别人看了不知道从哪儿开始呀。
额,我重新说下吧
tangwwip 2017-01-05
  • 打赏
  • 举报
回复
好像没说清楚,这里再说下

表原本是这样的


我想让他根据MonitorValue排序,MonitorValue是运行时间

select monitor.MonitorType,ServerAddress,monitor.MonitorValue from monitor,equipment where monitor.EquipmentId=equipment.RecId and monitor.MonitorType = 'SnmpUpTime' and monitor.MonitorStatus = 'good' order by convert(substring_index(substring_index(MonitorValue , ',' ,1), '=' , -1), DECIMAL(9, 2)) desc limit 10

上面sql的结果是这样的,可以看到并不是完全按照运行时间来排序的,想问下要怎么改正


自由自在_Yu 2017-01-05
  • 打赏
  • 举报
回复
两张表是什么样的?原始数据是什么样的?需要什么结果?你的语句时报错了,还是没错,查的结果不满意? 你说的不清不楚的,别人看了不知道从哪儿开始呀。
kahnyy5202015 2017-01-05
  • 打赏
  • 举报
回复
想法把时间转为秒,再排序。。。
tangwwip 2017-01-05
  • 打赏
  • 举报
回复
来个人看下咯

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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