【问题标题】:Conversion failed when converting date and/or time from character string in sql on different dates在不同日期从 sql 中的字符串转换日期和/或时间时转换失败
【发布时间】:2015-04-06 09:10:45
【问题描述】:

我有一个简单的问题:

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 的日期会引发错误。

【问题讨论】:

  • 你可能有一个系统默认关闭 mm-dd-yyyy,只有 12 个月 =p
  • 试试这个CAST ('20150414' AS DATE)
  • 最好的选择是完全使用字符串,而是使用日期类型存储日期并使用日期类型的参数和变量。

标签: sql sql-server date between


【解决方案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,这是有效的,因为默认日期格式ID 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 都视为对日期有效的一天。

【讨论】:

    【解决方案2】:

    使用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);
    

    或 YYYYMMDD 格式输入 Giorgos Betsos 建议的日期字符串

    SELECT CAST ('20150414' AS DATE)
    

    【讨论】:

    • 你不能总是知道输入数据的DATEFORMAT,你也不应该知道。使用CONVERT 也是如此。最好的选择是only 使用date-typed 数据。日期文字应使用未分隔的日期格式,因为它是唯一明确的格式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多