将英国格式日期转换为日期时间

Posted

技术标签:

【中文标题】将英国格式日期转换为日期时间【英文标题】:Converting UK format date to datetime 【发布时间】:2013-03-07 15:59:40 【问题描述】:

我在 SQL 中有一个表示日期的值,但它是 nvarchar 类型的。日期值的格式为:

dd/mm/yyyy hh:mm

我需要通过DATETIME 格式的CCure 800 数据库视图来呈现此列。我希望使用CAST/CONVERT;但是,使用它时,会返回以下错误:

消息 242,第 16 级,状态 3,第 1 行 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

【问题讨论】:

有类似的问题。请参阅可以完成的suggestion 之一。 【参考方案1】:

请停止将日期存储为字符串,尤其是为 Unicode 字符串。您是否担心我们日历的某些未来版本将使用变音符号、井号、象形文字或普通话而不是数字?

将日期存储为日期。这就是这些数据类型的用途。除了不必担心无效的解释之外,您还可以获得DATEPARTDATEADD 之类的所有好处,并且您不必担心有人在列中塞进废话(来自31/02/2012 的任何内容)给'I don''t want to enter a real date'...

与此同时,您只需要在CONVERT 中使用样式编号(这与CAST 一起使用并不可靠):

SELECT CONVERT(DATETIME, '13/06/2013 09:32', 103);

要使其与CAST 一起使用,您可以相应地设置LANGUAGEDATEFORMAT 设置,但您不能在视图中执行此操作,而且恕我直言,无论如何它会使代码非常脆弱。

SET DATEFORMAT DMY;
SELECT CAST('13/06/2013 09:32' AS DATETIME);

或者

SET LANGUAGE BRITISH;
SELECT CAST('13/06/2013 09:32' AS DATETIME);

在很大程度上,我更喜欢CONVERT 为您提供的附加控件,并且几乎单方面将CAST 的所有实例更改为CONVERT,即使不需要此控件也是如此,以保持一致性(为什么使用@987654336 @ 在某些情况下,CONVERT 在你需要的时候,你什么时候可以一直使用CONVERT?)。

编辑

要识别由于错误的数据类型选择而潜入表中的垃圾数据,请执行以下操作(然后修复数据,或者更好的是,修复数据类型,以免再次发生这种情况):

SET DATEFORMAT DMY;
SELECT date_column FROM dbo.table_name WHERE ISDATE(date_column) = 0;

【讨论】:

谢谢 - 了解日期的理论,你是对的。但是,让我们假设在这种情况下这是不可能的。 @user2145047 好吧,我仍然提供了一个答案。从“在此期间”阅读... 我也尝试使用 CONVERT(以及 CAST),但问题的关键是当字符串的格式正好是“DD/MM/YYYY HH:MM”时它不起作用- CONVERT 不会将其转换为日期。 嗨 - 当我按下回车键时它会添加评论 - 感谢您花费的时间! @user2145047 你能展示一个你尝试过的确切的CONVERT 命令的example,以及actual 值是什么,而不是仅仅说@ 987654341@?也许您没有正确使用CONVERT,或者您存储了垃圾数据。

以上是关于将英国格式日期转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

当我在英国地区将字符串转换为日期并且时区是马斯喀特时,DateFormatter 给了我不正确的结果

从 Jquery 到 C# Web API 传递和处理英国日期格式

将时间戳转化为日期格式

sql server2000如何将数字转换为日期时间

C# 将 DateTime 从 UTC 转换为 GMT 或 BST

如何使用php将日期格式转换为日期时间格式[重复]