我在 SQL 中有一个表示日期的值,但它是 nvarchar 类型的。日期的值采用以下格式:
dd/mm/yyyy hh:mm
我需要通过视图以DATETIME
格式显示此列到 CCure 800 数据库。我希望使用CAST
/ CONVERT
; 但是,使用它时,会返回以下错误:
消息 242,级别 16,状态 3,第 1 行
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
我在 SQL 中有一个表示日期的值,但它是 nvarchar 类型的。日期的值采用以下格式:
dd/mm/yyyy hh:mm
我需要通过视图以DATETIME
格式显示此列到 CCure 800 数据库。我希望使用CAST
/ CONVERT
; 但是,使用它时,会返回以下错误:
消息 242,级别 16,状态 3,第 1 行
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
请停止将日期存储为字符串,尤其是 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);
在很大程度上,我更喜欢为您提供的附加控件,并且几乎单方面更改toCONVERT
的所有实例,即使不需要此控件,以保持一致性(为什么在某些情况下使用,以及何时需要它,当您可以总是使用?)。CAST
CONVERT
CAST
CONVERT
CONVERT
编辑
要识别由于错误的数据类型选择而潜入表中的垃圾数据,请执行此操作(然后修复数据,或者更好的是修复数据类型,以免再次发生这种情况):
SET DATEFORMAT DMY;
SELECT date_column FROM dbo.table_name WHERE ISDATE(date_column) = 0;