代码之家  ›  专栏  ›  技术社区  ›  AgentNo

如何将SQL Server 2017中的日期更改为英国格式?

  •  1
  • AgentNo  · 技术社区  · 6 年前

    我的数据库中有几个表(包含数据),格式为美国标准mm/dd/yyyy。是否有办法将日期转换为不涉及删除和重新创建表格的英国格式(即dd/mm/yyyy)?

    谢谢

    4 回复  |  直到 6 年前
        1
  •  5
  •   Zohar Peled    6 年前

    我将数据类型设置为>创建表格的日期。我可以按以下格式存储日期 mm/dd/yyyy ,但不是 dd/mm/yyyy

    正如我在评论中提到的, dates are not stored with their display format -事实上,你可以这么说 日期没有显示格式 -只有日期的字符串表示具有显示格式。

    每当处理SQL server中表示日期和日期时间值的字符串文字时,请使用 ISO 8601 日期时间格式( yyyy-MM-ddTHH:mm:ss yyyyMMddTHHmmss )。
    SQL Server保证将此字符串表示形式正确解析为日期/日期时间值,而不会产生歧义。

    请注意 T 日期和时间之间的分隔符。有一种非常相似的标准格式,其中 T 替换为空白,但 the DateTime data type have a bug parsing this format -还有它 文化相关(请注意 DateTime2 没有那个bug),这是另一个原因 why you should never use datetime again.

    当您使用字符串文字时,如 '25/03/2018' 人类很容易看出它代表 March 25th 2018 ,但SQL Server 将引发错误 如果当前值 DATEFORMAT 不是 DMY

    但是,SQL Server将 总是 正确解析日期的ISO 8601字符串表示形式,而不考虑任何本地设置或以前的设置 set dateformat set language 声明等”。 '2018-02-01T15:40:50' 总是 被解析为 February 1st 2018, 3:40:50 PM

    如Martin Smith在评论中所述,除非另有规定,否则默认值 dateformat 取决于 当前登录名 -因此,对于一个登录名有效的查询可能会对另一个登录名引发错误,这是另一个很好的原因 从不 信任特定于区域性的datetime字符串表示形式。

        2
  •  3
  •   giorgi02    5 年前
    DECLARE @dt DATETIME = '01/20/2019';
    SELECT FORMAT( @dt, 'd', 'en-gb' ) AS 'UK'
    
        3
  •  2
  •   nvogel    6 年前

    您指的是SQL Server Management Studio或类似应用程序显示的日期格式吗?格式由Windows控制面板设置控制,而不是由SQL Server控制。SQL Server中没有日期的内部格式。

        4
  •  0
  •   Horacio Garza    6 年前

    默认情况下,这是从运行MS SQL Server的计算机定义的。

    要查看所有可用的区域性,请执行以下操作:

    select * from sys.syslanguages
    

    然后,可以使用以下方法更改SQL Server语言:

    SET LANGUAGE BRITISH
    

    。。。日期格式将始终如您所愿。

    注意:这将更改所有数据库(不仅仅是日期格式),另一种方法是使用 FORMAT T-SQL中的函数。