2012-12-22 43 views
1

如何将19 Dec 2012转换为由getdate()2012-12-22返回的日期格式。 因为如果我比较2012年12月19日与2012二零一二年十一月十九日年11月19会变成更大的日期,由于按字母顺序排列的比较,我需要这个日期比较。T-SQL日期格式

编辑

我不是数据库设计者为这个表,是给定的表,因为它是在工作。否则就不会使用VARCHAR存储日期

+0

我有像2012年12月19日类型为varchar()项列... –

+2

[不良习惯踢:选择了错误的数据类型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) - 你应该总是使用最合适的数据类型 - 毕竟这就是他们所在的地方!日期应**总是**作为'DATE'(或'DATETIME')存储。如果你的表中已经有了'varchar',那么将* that *转换为'DATE'或'DATETIME'进行比较 - 而不是相反! –

+0

SELECT转换(varchar,getdate(),106)结果2012年12月19日,是不是有一种方法来转换相反的方式.. –

回答

6

试试, 但这会返回一个字符串而不是日期

SELECT convert(varchar, getdate(), 106) 

你需要先比较GETDATE之前将其转换为日期。

SELECT convert(date, '19 Dec 2012', 106) 

你所设计的数据库中的一个?如果是,下次您设计时(或者您有时间更改),请使用适当的数据类型。

+0

我想要它的另一种方式.. –

+0

你的意思是? [SQLFiddle Demo](http://sqlfiddle.com/#!3/d41d8/7403) –

+0

'SELECT convert(date,'19 Dec 2012',106)' –

6

将两者都转换为日期。不要使用字符串来存储日期值!更好的是,改变你的数据库模式,并且字符串不匹配问题完全消失。

此外,请注意,Getdate()不会返回一个字符串。它在日期时间数据类型中返回一个日期。 客户端将其转换为字符串表示。

欲了解更多信息,请阅读SQL Server联机丛书中的“转换和转换”。

Convert (datetime, stringdate1) 

要修正损坏的数据库列做到这一点:

ALTER TABLE YourTable ALTER COLUMN BadStringDate datetime; 
+0

2分10k! – ErikE

+0

'+ 1'现在你是10k':D' –

+1

非常感谢! – ErikE