将英国格式日期转换为日期时间
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 字符串。您是否担心我们日历的某些未来版本将使用变音符号、井号、象形文字或普通话而不是数字?
将日期存储为日期。这就是这些数据类型的用途。除了不必担心无效的解释之外,您还可以获得DATEPART
和DATEADD
之类的所有好处,并且您不必担心有人在列中塞进废话(来自31/02/2012
的任何内容)给'I don''t want to enter a real date'
...
与此同时,您只需要在CONVERT
中使用样式编号(这与CAST
一起使用并不可靠):
SELECT CONVERT(DATETIME, '13/06/2013 09:32', 103);
要使其与CAST
一起使用,您可以相应地设置LANGUAGE
或DATEFORMAT
设置,但您不能在视图中执行此操作,而且恕我直言,无论如何它会使代码非常脆弱。
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 传递和处理英国日期格式