1

SQL 小提琴

CREATE TABLE [STUDENT_MASTER]
(
   [User_ID]        [int] IDENTITY (1, 1) NOT NULL CONSTRAINT STUDENT_MASTER_P_KEY PRIMARY KEY,
   [Name]           [varchar] (50), 
   [START_DATE]     [varchar] (50),
   [PRIORITY]       [varchar] (50) 
)

INSERT INTO STUDENT_MASTER
VALUES('JOHN','2013-08-16','4')
INSERT INTO STUDENT_MASTER
VALUES('JACK','2013-08-10','')
INSERT INTO STUDENT_MASTER
VALUES('MACK','','1')
INSERT INTO STUDENT_MASTER
VALUES('ACK','2013-08-15','2')

//SQL QUERY

SELECT ROW_NUMBER() OVER 
(ORDER BY CASE 
WHEN STUDENT_MASTER.START_DATE IS NULL THEN 1
WHEN STUDENT_MASTER.PRIORITY IS NULL THEN 1 
ELSE 0 END,STUDENT_MASTER.START_DATE DESC ,STUDENT_MASTER.PRIORITY DESC
)AS RowNumber,STUDENT_MASTER.START_DATE
FROM STUDENT_MASTER

如何按 DESC 开始日期和空值查询订单

4

3 回答 3

4

演示

ORDER BY 
  CASE WHEN START_DATE = '' THEN 0 ELSE 1 END ASC,
  START_DATE DESC

您可以使用ISNULL,但您的列没有null值 - 它包含空字符串。

还有另一个问题 - 因为你的START_DATE列是VARCHARDATETIME它不会执行字符串、字母排序而不是日期时间排序。

于 2013-08-16T10:12:29.763 回答
0

不要简单地 order by StartDate、 order byStartDate或默认值(如果它为 null)。

ORDER BY ISNULL(StartDate, '9999-12-31') DESC

哦...让您的日期成为实际的日期时间。否则,您将只是按字母顺序排序。

于 2013-08-16T10:12:03.087 回答
0

考虑到这是为了将您的日期作为字符串,这将是我解决问题的方法

SELECT
     start_date
FROM
     STUDENT_MASTER
ORDER BY
     LEN(start_date),
     start_date DESC

遵循SQL Fiddle

于 2013-08-16T10:13:14.973 回答