【问题标题】:How convert date in SQL with respect to system culture?如何根据系统文化转换 SQL 中的日期?
【发布时间】:2015-05-16 16:04:20
【问题描述】:

目前正在使用下面提到的代码

CONVERT(DATETIME, "16-05-2015 21:27:25.280",105)

在我的系统文化和我们在英国的客户之一中使用它。 但在我们的美国客户中面临问题。

错误信息:

将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围

所以有什么方法可以将字符串转换为DATETIME 取决于.net 中的系统文化。

提前致谢

Thejus TV

【问题讨论】:

    标签: sql sql-server datetime date-conversion string-to-datetime


    【解决方案1】:

    各种设置(语言、日期格式)仅影响DateTime 在 SQL Server Management Studio 中向您显示的方式 - 或者当您尝试将字符串转换为 DateTime 时如何解析它。

    SQL Server 支持多种格式 - 请参阅MSDN Books Online on CAST and CONVERT。这些格式中的大多数取决于您拥有的设置 - 因此,这些设置有时可能有效 - 有时无效。

    解决此问题的方法是使用 SQL Server 支持的(稍作调整的)ISO-8601 日期格式 - 这种格式始终有效 - 无论您的SQL Server 语言和日期格式设置。

    SQL Server 支持的ISO-8601 format 有两种形式:

    • YYYYMMDD 仅用于日期(无时间部分);请注意:没有破折号!,这非常重要! YYYY-MM-DD独立于 SQL Server 中的日期格式设置,并且适用于所有情况!

    或:

    • YYYY-MM-DDTHH:MM:SS 用于日期和时间 - 请注意:这种格式破折号(但它们可以省略),以及固定的T作为日期和时间之间的分隔符DATETIME 的一部分。

    这对 SQL Server 2000 和更高版本有效。

    如果您使用 SQL Server 2008 或更高版本以及 DATE 数据类型(仅限 DATE - 不是 DATETIME!),那么您确实也可以使用 YYYY-MM-DD 格式,并且也适用于 SQL Server 中的任何设置。

    不要问我为什么整个话题如此棘手和令人困惑——事情就是这样。但是使用YYYYMMDD 格式,您应该可以适应任何版本的 SQL Server 以及 SQL Server 中的任何语言和日期格式设置。

    对于 SQL Server 2008 及更高版本,如果您只需要日期部分,建议使用 DATE,如果同时需要日期和时间,则使用 DATETIME2(n)。如果可能,您应该尝试开始逐步淘汰 DATETIME 数据类型

    【讨论】:

    • YYYYMMDD 不是 ISO 格式。仅日期的 ISO 格式为 YYYY-MM-DD
    • @a_horse_with_no_name: 是的 - 从理论上讲,你是对的 - 但是 YYYY-MM-DD 在 SQL Server 中是不是语言独立的 - 试试吧@ 987654343@ - 这会导致错误!但是SET LANGUAGE german SELECT CAST('20150525' AS DATETIME) 可以按预期工作(这适用于DATETIME 数据类型 - 使用DATEDATETIME2(n),您的ISO 格式可以正常工作)
    • @marc_s 在我的情况下,输入日期时间因系统日期格式而异。有时可能是 dd-mm-yyyyy ,有时可能是 mm-dd-yyyy。
    • @marc_s 对不起,先生,有什么方法可以直接联系您吗?我的电子邮件地址可在我的个人资料页面上找到。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多