表定义:
CREATE TABLE [dbo].[Test]
(
[MonthYear] [NVARCHAR](8) NULL
) ON [PRIMARY]
当前数据:
预期结果:
我尝试了以下查询:
SELECT
MonthYear,
CONVERT(VARCHAR(9), '01-' + MonthYear, 106) AS ConvertedDate
FROM
dbo.Test
ORDER BY
ConvertedDate
此查询的结果
答案 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