在不同日期的sql中从字符串转换日期和/或时间时转换失败

时间:2015-04-06 09:10:46

标签: sql sql-server date between

我有一个简单的问题:

select cast( '11-04-15' as date)

适用于SQL,但

select cast( '14-04-15' as date)

抛出错误

Conversion failed when converting date and/or time from character string

为什么会这样? 超过12的日期会抛出错误。

2 个答案:

答案 0 :(得分:1)

  

是的,它会抛出异常是合乎逻辑的。原因是你需要的   保持特定的日期格式,如dd-mm-yyyymm-dd-yy或   别的什么

您可以使用DATEFORMATSET DATEFORMAT { format | @format_var }自行设置日期格式 默认值为mdy,有效参数为mdy, dmy, ymd, ydm, myd, and dym

请参阅here以获得更多说明。

当您尝试select cast( '11-04-15' as date)时,它接受11作为month04接受date,这是有效的,因为默认日期格式标识mm-dd-yyyy

但在select cast( '14-04-15' as date)中,它接受14作为month,对于默认日期格式无效,因此您需要使用set dateformat your_specific_date_format进行更改

set dateformat dmy

select cast('11-04-15' as date)
select cast( '14-04-15' as date)

两者都有效,因为当前日期格式为dd-mm-yyy

1114都视为对某个日期有效的日期。

答案 1 :(得分:0)

使用SET DATEFORMAT将日期格式设置为DDMMYY。这样的事情。

SET DATEFORMAT DMY;

SELECT CAST( '11-04-15' as date);
SELECT CAST( '14-04-15' as date);

您也可以使用CONVERT

SELECT CONVERT(DATE,'11-04-15',3);
SELECT CONVERT(DATE,'14-04-15',3);
按照Giorgos Betsos的建议

或YYYYMMDD格式输入日期字符串

SELECT CAST ('20150414' AS DATE)