【问题标题】:Date difference between two dates with format 01/06/18格式为 01/06/18 的两个日期之间的日期差异
【发布时间】:2018-11-09 11:18:25
【问题描述】:

大家好,我正在尝试获取两个日期之间的日期差异。我正在从多维数据集获取数据并保存在临时表中。我试图将日期字段定义为 varchar 以及 datetime 和 date 我的日期格式为 03/04/18 我正在尝试DATEDIFF(DAY, PAAR.DateReceived, O.DateReceived) 以获得天数差异。但我收到如下错误。

当我将临时表中的日期字段定义为 DateTime 或 Date “操作数类型冲突:ntext 与日期时间不兼容” 当我将临时表中的日期字段定义为 Varchar 时 "从字符串转换日期和/或时间时转换失败。"

提前致谢

【问题讨论】:

  • 我不知道 ntext 是什么,但为什么不能从格式正确的日期开始?
  • 嗨,因为多维数据集中的日期格式。存储日期为 01/12/19。我正在从多维数据集获取数据并存储在临时表中。在临时表中,我尝试了 varchar 和 date 格式。
  • 日期应该总是(真实的)日期,而且这种格式也是垃圾,它是模棱两可的!例如01 是月份中的哪一天,还是月份? YYYY-MM-DD 没有歧义
  • 我无法从您的日期示例中判断您使用的是 DD/MM/YY(小端序)还是 MM/DD/YY(美国不稳定的日期格式)。

标签: mysql sql


【解决方案1】:

我建议您使用带有适当格式修饰符的str_to_date() 将这些字符串转换为日期。

DATEDIFF(str_to_date(PAAR.DateReceived,'%d/%m/%y'), str_to_date(O.DateReceived,'%d/%m/%y'))

见:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

【讨论】:

    【解决方案2】:

    试试这个

    set @sdate = '01/01/18';
    set @edate = '01/26/18';
    
    set @sdate = CONCAT_WS('-',SUBSTR(@sdate FROM 7 FOR 2),SUBSTR(@sdate FROM 1 FOR 2),SUBSTR(@sdate FROM 4 FOR 2));
    set @edate = CONCAT_WS('-',SUBSTR(@edate FROM 7 FOR 2),SUBSTR(@edate FROM 1 FOR 2),SUBSTR(@edate FROM 4 FOR 2));
    
    SELECT DATEDIFF(date(@edate), date(@sdate));
    

    【讨论】:

    • 感谢您的帮助我做了如下位修改 "CONCAT(RIGHT(@dt,2),'-',SUBSTRING(@dt,4,2),'-',LEFT(@ dt,2))" 并且它 woek
    • str_to_date 答案等内置函数相比,字符串操作有点可怕。
    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多