2011-04-11 72 views
0

如果我上的SQL Server Express 2008运行此查询:SQL查询做奇怪的事情

Insert NoteBook (Date, Note) Values ('11/04/2011 11:02:46', 'test') 

它存储日期为04/11/2011

我如何避免这种情况?

+0

@marc_s这应该是一个答案,而不仅仅是一个评论。 – 2011-04-11 10:30:15

+0

这已经完成了死亡,至少在这里http://stackoverflow.com/questions/1138142/best-way-to-convert-and-validate-a-date-string – gbn 2011-04-11 10:36:05

回答

4

使用ISO-8601 formatYYYYMMDD(或YYYY-MM-DDTHH:MM:SS) - 无论您的SQL Server语言和区域设置如何,它都可以正常工作。

INSERT INTO dbo.NoteBook(Date, Note) 
VALUES('2011-04-11T11:02:46', 'test') 

在SQL Server中的日期为存储在任何面向特定字符串格式 - 日期是日期是日期,不管你看到了什么。

你看日期的字符串表示 - 但是:它是存储的方式 - 因此你不能“阻止”将其存储这样...

检查SQL语言设置服务器:

SELECT @@LANGUAGE 

你有什么语言?该语言定义了显示日期的默认格式。

+0

美国英语。我在哪里可以改变它,或者我应该改变它,如果我要使用yyyymmdd? – TeaDrinkingGeek 2011-04-11 10:31:41

+0

@teadrinkinggeek:如果你使用'yyyymmdd',你不需要改变任何东西 - ISO-8601格式**总是**。否则,您需要查看SQL Server中的[SET DATEFORMAT](http://msdn.microsoft.com/de-de/library/ms189491.aspx) - 这允许您定义您的字符串是否将被解释为“MM/DD/YYYY'(美国)或'DD/MM/YYYY'([世界其他地区](http://en.wikipedia.org/wiki/Date_format_by_country)) – 2011-04-11 10:33:21

+1

你说得对!我使用INSERT INTO dbo.NoteBook(Date,Note) VALUES('2011-04-11T11:02:46','test')并且它正确显示了它。谢谢。 – TeaDrinkingGeek 2011-04-11 10:37:08