SQL日期格式日和月混合

时间:2011-04-13 21:55:34

标签: sql date

似乎这个问题很多,但没有一个答案给了我结果。我把头发拉到这里......所以希望有人有答案。

我有一台运行SQL Server 2005的生产服务器。我备份了数据库并将其恢复到笔记本电脑的SQL Server Express实例上。现在日期查询受到严重影响。在产品中。服务器它们都存储为“4/13/2011 12:00:00 AM”格式,但在我的笔记本电脑上,它们显示为“2011-04-14 00:00:00.000”。当我查询“4/14/2011”上的条目时,我的笔记本电脑给出了错误“将varchar数据类型转换为日期时间数据类型导致超出范围的值”。 编辑:这个确切的查询在生产SQL服务器上运行正常。 (我正在使用SSMS来运行查询......而不是应用程序/代码)

我确保笔记本电脑的Windows区域设置与服务器(英语(美国))相同,并且“区域和语言”控制面板上的所有内容都完全相同。

最后,我运行了以下两个查询:

select name ,alias, dateformat
  from syslanguages
     where langid =
      (select value from master..sysconfigures
         where comment = 'default language')

select @@language

分别给出了“* us_english,English,mdy *”.....和“ British ”的结果。这个英国人来自哪里?!现在,当我在查询之前运行此命令时(在管理工作室中)

SET DATEFORMAT mdy

然后一切都完美无缺!但在syslanguages查询中它似乎已经是mdy格式。我不打算在整个地方用“SET DATEFORMAT”重写我的应用程序 - 所以希望有人有一个线索。也许我的SQL Express安装没问题,我必须重新安装它?

我会继续修修补补,希望能让它发挥作用。

3 个答案:

答案 0 :(得分:2)

您需要更改登录的语言设置。

您可以通过SSMS -> Security -> Logins -> YourLogin -> Properties -> Default Language

执行此操作

或通过TSQL

ALTER LOGIN [YourLogin] WITH  DEFAULT_LANGUAGE=[us_english]

答案 1 :(得分:0)

如果您以dd-mmm-yyyy格式指定内容,或者更好,请使用DateTime参数(而不是varchar输入),您将不会遇到任何问题。

尝试使用以下内容将默认语言更改为us-english:

EXEC sp_configure 'default language', 1033
RECONFIGURE

如果这不起作用,您可以尝试使用语言代码0。

答案 2 :(得分:0)

您是否将日期作为字符串文字传递 - 或者连接字符串以在您的应用程序中构建sql?

如果您这样做,请考虑使用dateTime数据类型的参数。或者至少使用ODBC转义子句对它们进行转义,并将它们格式化为{ts'yyyy-mm-ddhh:mm:ss [.fff]'},例如:{ts'1998-09-24 10:02:20' }。

很可能你的应用程序没有正确传递日期时间。