Foxtable(狐表)用户栏目专家坐堂 → 为什么sql语句 order by 日期,ID,但是结果只对日期排序,ID的排序却是出错的呢?


  共有1996人关注过本帖树形打印复制链接

主题:为什么sql语句 order by 日期,ID,但是结果只对日期排序,ID的排序却是出错的呢?

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
为什么sql语句 order by 日期,ID,但是结果只对日期排序,ID的排序却是出错的呢?  发帖心情 Post By:2017/8/20 16:06:00 [只看该作者]

我是sql2005,

 

sel-ect SupplierPayTime,SupplierPayID from SupplierPayMain order by SupplierPayTime ,SupplierPayID

 

我的问题是出在排序上

 

这个代码结果是

 

 
图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

这2个列的类型是
 
图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

先按照时间排序,如果时间一样,就按照ID排序,但是ID并没有排序,太奇怪了

 

如果只 ORDER BY  d.SupplierPayID


图片点击可在新窗口打开查看此主题相关图片如下:5.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2017/8/20 16:08:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/20 16:18:00 [只看该作者]

Order by Convert(varchar, SupplierPayTime, 120) ,SupplierPayID

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(有点甜)Order by Convert(varchar, Supplier...  发帖心情 Post By:2017/8/20 16:25:00 [只看该作者]

为啥转了时间为完整格式时间的字符串后,就可以比对成功?是不是sql的缺陷?

 

在狐表里,对时间排序后对ID排序,也是这样出现问题

 


图片点击可在新窗口打开查看此主题相关图片如下:6.jpg
图片点击可在新窗口打开查看

 


 

[此贴子已经被作者于2017/8/20 16:26:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/20 16:31:00 [只看该作者]

datetime类型,是存放毫秒等数据的, 如 2017-08-20 16:30:42 123

 

你肯定是毫秒数不同,导致排序出错。


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(有点甜)datetime类型,是存放毫秒等数据的,...  发帖心情 Post By:2017/8/20 16:46:00 [只看该作者]

真的是!我找到了

 


图片点击可在新窗口打开查看此主题相关图片如下:7.jpg
图片点击可在新窗口打开查看

为啥毫秒数会跟我新建单据的顺序不同?

 

是不是因为我的日期列,是客户端向服务器请求的

 

Dim cmd As New SQLCommand
Dim dt As Date
cmd.C
cmd.CommandText = "Select GetDate()"
dt = cmd.ExecuteScalar()
e.DataRow("SupplierPayTime")=  dt

 

服务器只返回了年月日 时分 ,没有秒和毫秒,我本地系统再转化为毫秒,导致的出错?有什么办法可以解决?我不能用本地时间,因为要防止用户的付款单据时间作弊


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/20 16:52:00 [只看该作者]

cmd.CommandText = "Select GetDate()"

 

改成

 

cmd.CommandText = "Select convert(varchar, GetDate(), 120)"


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(有点甜)cmd.CommandText = "Select GetDate(...  发帖心情 Post By:2017/8/20 16:57:00 [只看该作者]

我发现

 

Dim cmd As New SQLCommand
Dim dt As Date
cmd.C
cmd.CommandText = "Se lect GetDate()" ’换成Sele ct convert(varchar, GetDate(), 120) 也一样
dt = cmd.ExecuteScalar()
output.show(dt)

 

Dim r As Row = Tables("SupplierPayMain").AddNew
r("SupplierPayTime") = dt
output.show(r("SupplierPayTime"))

 

结果: 

2017-08-20 16:57:58
2017-08-20 16:57:00
列属性为 datatime的,就只剩下 2017-08-20 16:40:00,没有了秒,是不是列属性的问题?

[此贴子已经被作者于2017/8/20 17:00:17编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/20 17:00:00 [只看该作者]

以下是引用chen3728060在2017/8/20 16:57:00的发言:

 

但是存进去列属性为 datatime的,就只剩下 2017-08-20 16:40:00,没有了秒,是不是列属性的问题?

 

列属性那里要设置成 dateLongTime 才能保存秒。


 回到顶部