【发布时间】:2020-12-07 08:59:44
【问题描述】:
我想在短期内订购
ShortDate
20-Nov
17-Nov
29-Nov
15-Nov
7-Nov
6-Dec
25-Nov
14-Nov
9-Nov
12-Nov
5-Dec
26-Nov
28-Nov
8-Nov
1-Dec
3-Dec
23-Nov
我用过
ORDER BY CAST(CAST(DATEPART(MONTH,ShortDate) AS VARCHAR(10)) + CAST(RIGHT( '0' + CAST(DAY(ShortDate) AS varchar(2)), 2) AS VARCHAR(10)) AS INT) DESC
整个查询是
SELECT StaffAttendencecount ,TC.ShortDate
FROM #TempStaffAttendnece
INNER JOIN #TempCONStaffAttendnece TC
ON #TempStaffAttendnece.ShortDate = TC.ShortDate
ORDER BY CAST(CAST(DATEPART(MONTH,TC.ShortDate) AS VARCHAR(10)) + CAST(RIGHT( '0' + CAST(DAY(TC.ShortDate) AS varchar(2)), 2) AS VARCHAR(10)) AS INT) DESC
但它不起作用 我明白了
消息 241,第 16 级,状态 1,第 80 行 从字符串转换日期和/或时间时转换失败。
谁能帮忙
【问题讨论】:
-
请解释一下:“但它不起作用”。还给我们整个查询,而不仅仅是按部分排序。
-
当每个数据库系统都内置了
datetime相关数据类型并且它已经知道如何正确排序时,为什么还要使用字符串?理想情况下,尽可能将其保留在此类类型中,并且仅在向用户显示时将其格式化为文本(同样,尽早解析输入文本 - 大多数应用程序在处理时应该使用日期时间数据类型,而不是字符串日期) -
列数据类型?
-
您使用的是哪个 dbms?日期/时间和字符串函数都是许多 dbms 产品都有自己版本的领域。
-
它说 Msg 241, Level 16, State 1, Line 80 从字符串转换日期和/或时间时转换失败。
标签: sql sql-server sql-order-by