11

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

有趣的是,当我编写 T-SQL 检索记录时,我必须输入 MM/DD/YYYY 格式才能取回正确的数据。无论如何我可以将它与 DD/MM/YYYY 格式对齐吗?

4

7 回答 7

12

您可以使用SET LANGUAGE选择 SQL Server在查询中期望的日期格式(我认为管理工作室使用客户端计算机的区域设置进行显示,但不确定)。但是,我建议使用参数传递值,而不是将它们嵌入到查询语句中。如果你使用参数,你不会遇到任何问题。一切都得到照顾。

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
于 2009-07-27T08:49:46.123 回答
4

就个人而言,我总是使用 YYYY-MM-DD 格式(或 YYYYMMDD),因为它不是特定于文化的,而且,我想它对我很有吸引力,因为它是“合乎逻辑的”(尤其是在时间之后)。

[编辑:我只是在谈论我在 SQL 脚本中放入的内容,以确保无论服务器设置如何兼容,而不是 SQL Server“显示”]

于 2009-07-27T08:51:04.327 回答
3

您可以为每个单独的SQL Server 登录设置默认语言。记不太清了,大概是这样的:

sp_defaultlanguage @loginame = 'LoginName', @language = 'Language'
于 2009-07-27T21:42:15.803 回答
2

如果您以格式传入 DATETIME

dd MMM yyyy

例如

"11 JUL 2009"

月份和日期永远不会有任何歧义,因此您永远不会有问题

于 2009-07-27T10:33:08.630 回答
1

在几乎所有情况下,解决此问题的正确方法就是永远不要将日期视为字符串。如果您传入一个参数,或者使用(键入的)列值,那么服务器的文本转换根本就不是一个因素。除了避免 i18n 问题之外,这还减少了您的注入攻击面。它也节省了一些 CPU 周期;-p

如果您使用EXEC的是动态 SQL,那么这同样应该通过sp_ExecuteSQL.

于 2009-07-27T09:02:21.887 回答
1

我尽可能使用日期的 ODBC 规范形式 {d 'yyyy-mm-dd'} 这样我就知道 sql server 将如何解释它。它在 TSQL 中工作得很好。

于 2009-07-27T21:36:11.917 回答
1

将其添加到您的 web.config 文件中:

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

或者您可以在页面上添加此语句:

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

希望这有帮助。

于 2012-06-27T09:59:58.090 回答