如何重新格式化和排序存储在nvarchar中的日期

时间:2009-07-15 17:36:47

标签: sql sql-server tsql date

我正在尝试显示日期列的月份和YY部分,使其显示为

原始格式

Apr 12 2009;          
Feb 20 2009;
Dec 24 2008;
May 18 2009;
Jan  8 2009;
Dec  6 2008;
Apr 19 2009;
Jan  4 2009;
May 13 2009;
Jan  5 2009

从这些日期开始,应该剔除日期部分,使其显示为“Apr 09”,并且仍然可以按日期排序,使其显示为:

Dec 08;
Jan 09;
Feb 09;
Mar 09;
Apr 09;
May 09

谢谢, 下垂。

3 个答案:

答案 0 :(得分:2)

如果要将日期作为字符串存储在数据库中,则需要使用与ISO-8601标准相同的格式,即使用数字月份并将最重要的值放在第一位。

要进行文本排序,您的值需要看起来像:

08-12, 09-01, 09-02, 09-03, 09-04, 09-05

但是,我建议您将日期作为日期时间值存储在数据库中,并在显示值时注意格式。这样你就可以轻松地在数据库中对它们进行排序(并且还可以进行任何其他处理,例如获取两个日期之间的差异)。

从日期时间值,您可以轻松获得所需的格式。例如,在.NET中,您可以使用theDate.ToString("MMM yy")完全按照您的要求格式化日期。在从数据库获取数据后进行格式化时,格式不是文本可排序的问题不是问题。

答案 1 :(得分:0)

您需要LEFT函数,并且可以在SQL SERVER中对datetime或smalldatetime进行排序。

答案 2 :(得分:0)

你没有说哪个数据库,这是用于SQL Server ... 尝试:

declare @x table (datestring nvarchar(30))
insert into @x values ('Feb 20 2009')
insert into @x values ('Dec 24 2008')
insert into @x values ('May 18 2009')
insert into @x values ('Jan 8 2009')
insert into @x values ('Dec 6 2008')

select * from @x

SELECT
    LEFT(CONVERT(varchar(30),convert(datetime,datestring),109),3)+' '+SUBSTRING(CONVERT(varchar(30),convert(datetime,datestring),121),3,2)
    FROM @x
    ORDER BY CONVERT(datetime,datestring)

您不应该将日期存储在字符串中,它需要更多空间,并且难以对它们进行排序和比较。