SQL Server日期时间的问题。 美国与英国的?(SQL Server Datetime i

2019-06-26 21:52发布

在我的测试数据库中,日期显示在DD / MM / YYYY格式。 通过显示我的意思是,当你右键单击Management Studio中,打开表,返回的数据显示在DD / MM / YYYY格式。

有趣的是,当我写T-SQL来检索记录,我必须输入MM / DD / YYYY格式重新回到正确的数据。 反正我有可以对准这一个DD / MM / YYYY格式?

Answer 1:

您可以使用设置语言要选择SQL Server 需要在查询日期格式(我认为管理Studio使用客户端计算机的区域设置为显示目的,不知道虽然)。 不过,我建议使用传递的参数值在查询语句中嵌入他们的来代替。 如果你使用的参数,你不会遇到任何问题。 一切都照顾。

set language us_english
declare @d datetime = '1929/12/18'

set language british
declare @d datetime = '1929/12/18' -- fails

若要更改服务器的默认语言:

declare @langid int = (select langid from syslanguages where name = 'british')
exec sp_configure 'default language', @langid
reconfigure with override


Answer 2:

就个人而言,我总是用YYYY-MM-DD格式(或YYYYMMDD),因为它不是文化特有的,并且,好了,我想这吸引了我,因为它是“逻辑”(后跟特别是当时间)。

[编辑:我只是在谈论什么,我把我的SQL脚本,以确保兼容性,无论服务器设置的,而不是SQL Server的“显示”]



Answer 3:

您可以设置每个indvidual的默认语言SQL Server登录 。 不太记得了,但这样的事情:

sp_defaultlanguage @loginame = 'LoginName', @language = 'Language'


Answer 4:

如果您在DATETIME传递格式

dd MMM yyyy

例如

"11 JUL 2009"

有不舍月份和日期任何含糊之处,因此你永远不应该有问题



Answer 5:

在几乎所有情况下,要解决这个问题的正确方法很简单,就是别把日期为字符串。 如果你在一个参数传递,或使用(类型)列值,则服务器的文本转换根本就不是一个因素。 除了避免在国际化的问题,这也降低了您的注入攻击面。 它可以节省一些CPU周期,也;-p

如果你正在使用EXEC动态SQL,那么这应该同样可以通过参数化sp_ExecuteSQL



Answer 6:

我尝试使用日期的ODBC规范形式尽可能{d“YYYY-MM-DD”}这样,我知道服务器如何将SQL解释。 它工作在TSQL就好了。



Answer 7:

无论是添加到您的web.config文件:

</system.web>
    <globalization culture="en-US" uiCulture="en-US" />
</system.web>

或者您可以添加在页面上这样一句话:

<%@ Page uiCulture="en-US" culture="en-US" %>

希望这有助于。



文章来源: SQL Server Datetime issues. American vs. British?