【问题标题】:T-SQL using date format accounting the format of sql serverT-SQL 使用日期格式记帐 sql server 的格式
【发布时间】:2019-03-19 23:49:45
【问题描述】:

我有以下疑问:

Select dateadd(HOUR, 24, '2018/10/15 00:00:00')

这适用于我的本地 SQL Server,但由于时间格式(意大利日期格式)而在 SQL-Express 上失败。 所以我应该写:

Select dateadd(HOUR, 24, '15/10/2018 00:00:00')

如何解释两台服务器的日期格式差异。 我希望我的查询在两者上运行。我应该使用哪种语法?

【问题讨论】:

  • 您可以使用 SET LANGUAGE 强制当前执行的语言环境。 docs.microsoft.com/en-us/sql/t-sql/statements/…
  • 每个查询都不可行吗?
  • 有没有办法知道服务器的日期格式,以便我知道如何相应地更改我的查询?
  • 看看这个:database.guide/…
  • 是的,先生,使用 SET LANGUAGE。您不是为每个查询设置它,而是为每个连接设置它。

标签: tsql date format


【解决方案1】:

当将字符串文字用作datetimedatetimedatetime2 值时,请始终使用ISO8601 格式,因为SQL Server 始终会将其正确转换为适当的数据类型。

  • 仅限日期,请使用yyyy-mm-dd (2018-10-15)
  • 仅限时间,请使用hh:mm:ss(24 小时)(17:33:25)
  • 对于日期 + 时间,再次使用 yyyy-mm-ddThh:mm:ss,(24 小时)(2018-10-15T17:33:25)

【讨论】:

  • 我用的是iso格式,但是在其他服务器上不行
  • 您问题中日期的字符串表示形式都不是 ISO8601。分隔符也很有意义。 2018/15/102018-15-10 不同。
  • 谢谢,这似乎有效。我会尝试更多您的解决方案
  • @PedroRodrigues SQL 提供日期时间类型,但是如何用日期时间值实例化局部变量?您可以使用另一个日期时间值、返回日期时间值的内置方法或表示日期时间值的字符串文字。
【解决方案2】:

我建议您使用另一种方法,这在您标准化输入的机会有限时可能会有所帮助:除了 SQL Server 上的任何特定文化之外,您可以使用@987654322 设置仅适用于后续命令的命令范围日期格式@。

例如。

SET DATEFORMAT ymd; 
Select dateadd(HOUR, 24, '2018/10/15 00:00:00')

SET DATEFORMAT dmy; 
Select dateadd(HOUR, 24, '15/10/2018 00:00:00')

您可以通过切换y(年)、m(月)和d(日)字符来使用不同的格式。

参考:SET DATEFORMAT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-14
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多