首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >格式化日期的排序

格式化日期的排序
EN

Stack Overflow用户
提问于 2017-12-13 21:51:20
回答 2查看 47关注 0票数 1

我目前设置了一个表,用于报告历史数据。我有过

代码语言:javascript
运行
复制
SELECT ACTIONTYPE,
       BINNUM,
       DSID,
       LOCATIONNAME,
       LOCATIONTYPE,
       ORDNO,
       ORIGREC,
       convert(varchar(10),TIMEOFACTION, 101) + 
             right(convert(varchar(32),TIMEOFACTION,100),8) as TIMEOFACTION,
       TOTALLIFE 
FROM DLOCATIONHISTORY 
ORDER BY TIMEOFACTION DESC

我已经编辑了TIMEOFACTION列,以便它将日期格式的字段显示为mm/dd/yyyy hh:mmAM/PM。但是,引用我的查询的程序将AM放在PM之前,因为AP之前。解决我的查询以防止这种情况发生的最佳方法是什么?有没有不同的排序技术我可以使用?

我当前的报表查询显示:

代码语言:javascript
运行
复制
**TIMEOFACTION**
12/13/2017 7:29AM
12/12/2017 10:07AM
12/12/2017 9:58AM
12/12/2017 1:51PM
12/12/2017 2:02PM
12/11/2017 11:01AM

当它应该显示时:

代码语言:javascript
运行
复制
**TIMEOFACTION**
12/13/2017 7:29AM
12/12/2017 2:02PM
12/12/2017 1:51PM
12/12/2017 10:07AM
12/12/2017 9:58AM
12/11/2017 11:01AM
EN

回答 2

Stack Overflow用户

发布于 2017-12-13 22:14:58

LOL,仅包含表名或表别名的完整引用列:

代码语言:javascript
运行
复制
SELECT ACTIONTYPE,
       BINNUM,
       DSID,
       LOCATIONNAME,
       LOCATIONTYPE,
       ORDNO,
       ORIGREC,
       convert(varchar(10),TIMEOFACTION, 101) + 
             right(convert(varchar(32),TIMEOFACTION,100),8) as TIMEOFACTION,
       TOTALLIFE 
FROM DLOCATIONHISTORY 
ORDER BY DLOCATIONHISTORY.TIMEOFACTION DESC --<-- here!

Simplified sample

MS SQL Server 2014架构安装程序

代码语言:javascript
运行
复制
create table t ( i int, a char(1) );
insert into t values
(1,'a'),
(2,'b'),
(3,'c');

查询1

代码语言:javascript
运行
复制
select -1*i as i, a
from t
order by t.i

代码语言:javascript
运行
复制
|  i | a |
|----|---|
| -1 | a |
| -2 | b |
| -3 | c |

查询2

代码语言:javascript
运行
复制
select -1*i as i, a
from t
order by i

代码语言:javascript
运行
复制
|  i | a |
|----|---|
| -3 | c |
| -2 | b |
| -1 | a |
票数 0
EN

Stack Overflow用户

发布于 2017-12-13 22:18:19

可以使用具有列别名的派生表,然后重命名回原始列名。例如:

代码语言:javascript
运行
复制
DECLARE @table TABLE(TIMEOFACTION datetime)
INSERT INTO @table VALUES
 ('2017-12-13 07:29:00')
,('2017-12-12 10:07:00')
,('2017-12-12 09:58:00')
,('2017-12-12 13:51:00')
,('2017-12-12 14:02:00')
,('2017-12-11 11:01:00')

SELECT convert(varchar(10),dT.TIMEOFACTION2, 101) 
       + right(convert(varchar(32),TIMEOFACTION2,100),8) as TIMEOFACTION
  FROM (
        SELECT TIMEOFACTION AS TIMEOFACTION2
          FROM @table
       ) AS dT
ORDER BY TIMEOFACTION2 DESC

产生:

代码语言:javascript
运行
复制
TIMEOFACTION
12/13/2017  7:29AM
12/12/2017  2:02PM
12/12/2017  1:51PM
12/12/2017 10:07AM
12/12/2017  9:58AM
12/11/2017 11:01AM
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47794651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档