用于按升序对 MMM-YYYY 文本数据进行排序的 SQL 查询

Six*_*nse 1 sql sql-server

表定义:

CREATE TABLE [dbo].[Test]
(
    [MonthYear] [NVARCHAR](8) NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

当前数据:

在此处输入图片说明

预期结果:

在此处输入图片说明

我试过这个查询:

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

此查询的结果:

在此处输入图片说明

Gor*_*off 5

你似乎想要:

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

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

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

SELECT MonthYear
FROM dbo.Test
ORDER BY CONVERT(DATE, '01-' + MonthYear);
Run Code Online (Sandbox Code Playgroud)

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

ALTER TABLE Test
    ADD MonthYear_date as (CONVERT(DATE, '01-' + MonthYear));
Run Code Online (Sandbox Code Playgroud)

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