SQL查询以升序对MMM-YYYY文本数据进行排序

时间:2019-04-11 09:48:21

标签: sql sql-server

表定义:

CREATE TABLE [dbo].[Test]
(
    [MonthYear] [NVARCHAR](8) NULL
) ON [PRIMARY]

当前数据:

enter image description here

预期结果:

enter image description here

我尝试了以下查询:

SELECT 
    MonthYear, 
    CONVERT(VARCHAR(9), '01-' + MonthYear, 106) AS ConvertedDate 
FROM 
    dbo.Test
ORDER BY
    ConvertedDate

此查询的结果

enter image description here

4 个答案:

答案 0 :(得分:4)

您似乎想要:

SELECT MonthYear,
       CONVERT(DATE, '01-' + MonthYear) as ConvertedDate
FROM dbo.Test
ORDER BY ConvertedDate;

SQL Server非常擅长将字符串转换为不带格式的日期。

注意:您无需在SELECT中包含转换,因此:

SELECT MonthYear
FROM dbo.Test
ORDER BY CONVERT(DATE, '01-' + MonthYear);

或者,您甚至可以将其添加到表中:

ALTER TABLE Test
    ADD MonthYear_date as (CONVERT(DATE, '01-' + MonthYear));

然后,您可以像使用表中的其他任何列一样使用MonthYear_date

答案 1 :(得分:2)

CAST的字符串值DATE将有效

SELECT MonthYear, CAST(CONVERT(VARCHAR(9), '01-' + MonthYear ,106) AS DATE) AS ConvertedDate 
FROM dbo.Test
ORDER BY ConvertedDate

使用示例数据执行示例:

DECLARE @TestData TABLE (MonthYear VARCHAR (10));

INSERT INTO @TestData (MonthYear) VALUES
('May-19'), ('Jan-19'), ('Jun-19'), ('Feb-19');

SELECT MonthYear, CAST(CONVERT(VARCHAR(9), '01-' + MonthYear ,106) AS DATE) AS ConvertedDate 
FROM @TestData
ORDER BY ConvertedDate

答案 2 :(得分:0)

使用order by convert(nvarchar,[MonthYear],101)

select *, convert(nvarchar,[MonthYear],101) 
from [dbo].[Test]
order by convert(nvarchar,[MonthYear],101) 

输出 19年1月 5月19日

答案 3 :(得分:0)

您需要将CONVERT字符串日期设置为...日期:

SELECT CONVERT(DATETIME, '01 ' + REPLACE(MonthYear, '-', ' '), 6) AS ConvertedDate
FROM ...
ORDER BY ConvertedDate