我有以下代码
SELECT
CASE WHEN @ID = 1 THEN CONVERT(nvarchar(10), [insert_date],101)
ELSE CONVERT(nvarchar(10), [insert_date],103)
END AS [insert_date]
FROM Dates
ORDER BY [insert_date] DESC
现在,当日期为101格式时,以MM / DD / YYYY输出,顺序正确(DESC按月),但当日期为103格式时,输出为DD / MM / YYYY,顺序为不正确(按天DESC)。
即使日期为DD / MM / YYYY,我怎样才能按月订购?
谢谢
答案 0 :(得分:3)
SELECT
CASE WHEN @ID = 1 THEN CONVERT(nvarchar(10), [insert_date],101)
ELSE CONVERT(nvarchar(10), [insert_date],103)
END AS [insert_date]
FROM Dates
ORDER BY CONVERT(nvarchar(10), [insert_date],101) DESC
答案 1 :(得分:2)
试试这个: -
order by datepart(month,[insert_date]) desc
答案 2 :(得分:1)
尝试使用格式112
当@ID = 1 THEN CONVERT时选择情况(nvarchar(10), [insert_date],101) ELSE CONVERT(nvarchar(10),[insert_date],103)END AS [insert_date] FROM Dates ORDER BY CONVERT(nvarchar(10), [insert_date],112)DESC
答案 3 :(得分:1)
您的意思是使用[insert_date]
作为输入列名称,还是输出计算列名称?它不清楚,但(正如Jermy在评论中所证实的那样)这意味着你要覆盖ORDER BY
子句使用的值。这就是你想要的吗?
除非您可以保证它们采用词法可排序的格式(例如yyyy-MM-dd),否则您绝不应该按字符串表示法排序日期。除非你有一些非常好的理由,否则你应该按日期排序。不要将它转换为nvarchar
。
答案 4 :(得分:1)
如果您确实希望订购使用月份,无论年份如何(即将所有1月份的条目保存在一起多年),请使用@Indoknight的解决方案。
如果您实际上只想按日期的降序排列结果,而不考虑日期格式,那么请将表名作为订单的一部分包括在内:
SELECT
CASE WHEN @ID = 1 THEN CONVERT(nvarchar(10), [insert_date],101)
ELSE CONVERT(nvarchar(10), [insert_date],103)
END AS [insert_date]
FROM DateTest
ORDER BY DateTest.[insert_date] DESC