SQL日期格式的日月混合

问题描述

| 看来这个问题被问了很多,但没有一个答案给我结果。我正在把头发拉出来……所以希望有人能回答。 我有一台运行SQL Server 2005的生产服务器。我备份了数据库并将其还原到笔记本电脑的SQL Server Express实例上。现在,日期查询受到严重影响。在产品中。在服务器上,它们都存储为“ 2011年4月13日12:00:00”格式,但在我的笔记本电脑上,它们都显示为“ 2011-04-14 00:00:00.000”。当我执行查询试图在\“ 4/14/2011 \”上查找条目时,我的笔记本电脑给了我错误消息\“将varchar数据类型转换为日期时间数据类型导致值超出范围\” 。编辑:此确切查询在生产SQL Server上运行良好。 (我正在使用SSMS运行查询...而不是应用程序/代码) 我确保笔记本电脑的Windows区域设置与服务器(英语(美国))相同,并且“区域和语言”控制面板上的所有内容都完全相同。 最后,我运行以下两个查询:
select name,alias,dateformat
  from syslanguages
     where langid =
      (select value from master..sysconfigures
         where comment = \'default language\')

select @@language
分别给出了\“ * us_english,英语,mdy * \” .....和\“英国\”的结果。这个英国人从哪里来?现在,当我在查询之前运行此命令时(在Management Studio中)
SET DATEFORMAT mdy
然后,一切正常!但是在syslanguages查询中,它似乎已经是mdy格式。我不会到处都用\“ SET DATEFORMAT \”来重写我的应用程序-因此希望有人能提供一个线索。也许我的SQL Express安装是错误的,必须重新安装吗? 我将继续修补,以期使它起作用。     

解决方法

您需要更改登录名的语言设置。 你可以通过
SSMS -> Security -> Logins -> YourLogin -> Properties -> Default Language
来做 或通过TSQL
ALTER LOGIN [YourLogin] WITH  DEFAULT_LANGUAGE=[us_english]
    ,如果您以
dd-mmm-yyyy
格式指定内容,或者更好的是使用
DateTime
参数(而不是varchar输入),则不会有问题。 尝试使用以下方法将默认语言更改为我们英语:
EXEC sp_configure \'default language\',1033
RECONFIGURE
如果这样不起作用,则可以尝试使用语言代码0。     ,您是将日期作为字符串文字传递-还是连接字符串以在应用程序中构建sql? 如果执行此操作,请考虑将参数用于dateTime数据类型。或者至少使用ODBC转义子句对它们进行转义,并按照{ts \'yyyy-mm-ddhh:mm:ss [.fff] \'}中的格式进行格式化,例如:{ts \'1998-09-24 10:02 :20 \'}。 这很可能是您的应用程序未正确传递日期时间。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...