【问题标题】:Change default date time format on a single database in SQL Server更改 SQL Server 中单个数据库的默认日期时间格式
【发布时间】:2008-12-01 14:24:45
【问题描述】:

我需要在 SQL 服务器计算机上的单个数据库上将日期格式从美国 (mm/dd/YYYY) 更改为英国 (dd/mm/YYYY)。

如何做到这一点?

我已经看到了针对整个系统执行此操作的语句,以及针对会话执行此操作的语句,但我现在无法更改代码,因为它必须再次通过 QA,因此我需要快速修复更改日期时间格式。

更新

我意识到日期时间与 SQL Server 如何存储数据无关,但它与它如何解析查询有很大关系。

我正在将 XML 文件中的原始数据放入数据库中。 XML 文件中的日期采用英国日期格式。

【问题讨论】:

    标签: sql-server datetime


    【解决方案1】:

    您可以使用 SET DATEFORMAT,就像在这个例子中一样

    declare @dates table (orig varchar(50) ,parsed datetime)
    
    SET DATEFORMAT ydm;
    
    insert into @dates
    select '2008-09-01','2008-09-01'
    
    SET DATEFORMAT ymd;
    insert into @dates
    select '2008-09-01','2008-09-01'
    
    select * from @dates
    

    解析 XML 数据时需要在代码中指定日期格式

    【讨论】:

    • @Y。 Ecarri - 那么如何更改数据库日期(不是日期时间)格式?在我的 SQL 服务器中,格式是 yyyy-mm-dd 但是我需要永久使用 mm/dd/yyyy。请帮忙。
    【解决方案2】:

    为了避免处理这些非常无聊的问题,我建议您始终使用 标准且唯一的 SQL/ISO 日期格式(即 YYYY-MM-DD)解析数据。然后,无论您的主服务器或查询客户端上的日期参数是什么(本地日期设置可能与主服务器设置不同),您的查询都将在国际范围内工作!

    【讨论】:

    • 不幸的是,我没有生成只是消费它的数据。
    • Philippe - 我也坚信这一点,直到有人在 SQL Server 2008 中向我展示了一个示例,当指定为 2008-09-01 的日期被转换为 2008 年 1 月 9 日时,区域设置为美国.
    • 作为一项规则,我试图避免在数据库级别使用字符串格式的日期。在处理数据输入时,我会使用适当的语言环境设置将字符串转换为应用程序级别的日期,以便它以 datetime 日期类型到达数据库。这样它就独立于本地设置
    • 我已将此标记为有用,因为它对我有帮助,尽管它并没有真正解决 Omar 的问题。但是,我很想看看 Kristof 失败的例子——当然,如果它在所有情况下都无法正确解析 ISO 格式,无论服务器配置如何,这是一个错误?! (我意识到这是一个非常古老的问题,所以我对一个例子不抱太大希望......)
    • 在 SQL Server 中以独立于区域设置的格式写入日期的正确方法是YYYYMMDD(不是YYYY-MM-DD),请参阅KB173907(引用:可能的解决方案这是使用 ISO 标准格式将日期时间数据发送到 SQL Server,即“YYYYMMDD”(无分隔符)。)
    【解决方案3】:

    您只能更改整个服务器上的语言,而不是单个数据库。但是,如果您需要支持英国,您可以在所有输入和输出之前运行以下命令:

    set language 'british english'
    

    或者,如果您在从应用程序输入数据时间时遇到问题,您可能需要考虑通用输入类型,例如

    2008 年 12 月 1 日

    【讨论】:

    • 那么如何更改服务器上的语言?
    【解决方案4】:

    虽然您不能为单个数据库设置默认日期格式,但您可以更改用于访问该数据库的登录名的默认语言:

    ALTER LOGIN your_login WITH DEFAULT_LANGUAGE=British
    

    在某些情况下它会有所帮助。

    【讨论】:

      【解决方案5】:

      如果这确实是 QA 问题并且您无法更改代码。在机器上设置一个新的服务器实例并将语言设置为“英式英语”

      【讨论】:

        【解决方案6】:

        用途:

        select * from mytest
        EXEC sp_rename 'mytest.eid', 'id', 'COLUMN'
        alter table mytest add id int not null identity(1,1)
        update mytset set eid=id
        ALTER TABLE mytest DROP COLUMN eid
        
        ALTER TABLE [dbo].[yourtablename] ADD DEFAULT (getdate()) FOR [yourfieldname]
        

        它正在 100% 工作。

        【讨论】:

          【解决方案7】:

          您确实意识到格式与 SQL Server 如何存储日期时间无关,对吧?

          您可以为每个会话使用set dateformat。没有只针对数据库的设置。

          如果您使用参数进行数据插入或更新或过滤,您不会遇到任何问题。

          【讨论】:

            【解决方案8】:

            对于 SQL Server 2008 运行:

            EXEC sp_defaultlanguage 'username', 'british'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-26
              • 2016-01-25
              • 1970-01-01
              • 2016-02-17
              相关资源
              最近更新 更多