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查询开始日期和第一个空值
答案 0 :(得分:4)
ORDER BY
CASE WHEN START_DATE = '' THEN 0 ELSE 1 END ASC,
START_DATE DESC
您可以使用ISNULL
,但您的列没有null
值 - 它有空字符串整数。
另一个问题是 - 因为您的START_DATE
列是VARCHAR
,而不是DATETIME
,它会执行字符串,字母排序,而不是日期时间排序。
答案 1 :(得分:0)
不要只按StartDate
订购,按StartDate
订购,如果订货为空,则订购默认值。
ORDER BY ISNULL(StartDate, '9999-12-31') DESC
哦......让你的约会时间成为实际的约会时间。否则你只是按字母顺序排序。
答案 2 :(得分:0)
考虑到你的日期是字符串,这将是我解决问题的方法
SELECT
start_date
FROM
STUDENT_MASTER
ORDER BY
LEN(start_date),
start_date DESC