【问题标题】:Datediff in columns in MySQLMySQL中列中的日期差异
【发布时间】:2023-04-05 11:51:01
【问题描述】:

我想在 mySQL 中使用 datediff 函数,但我的代码返回 Null,我认为这是因为我使用的列的格式为 MM/DD/YYYY。我怎么能过来这个。这是我的代码。

select p.`Brand.Name`, datediff( 'p.`Pdo.Date`', 'f.`EntryDate`') from packaging as p
join volumes as v using(batchNum)
join fermentation as f on v.`LineNum` = f.`QC.LineId` 
group by `Brand.Name`;

【问题讨论】:

  • 日期列的类型是什么?如果是 varchar,则应将其更改为 date
  • 哦,我明白了。它是文本
  • 并且没有格式化为 mdy 的列
  • @Strawberry 所以由于我的数据格式是 dd/mm/yyyy 我不能简单地将我的数据类型更改为日期,因为它必须在 yyyy-mm-dd 我现在使用了这个将其重新格式化为选择语句的代码: select DATE_FORMAT(STR_TO_DATE(Date.Tested,'%d/%m/%Y'), '%Y-%m-%d') as DateFormat from airtest;但是您知道如何更改列并将值的格式更改为 yyyy-mm-dd?
  • 这里不需要 DATE_FORMAT();正确重新格式化日期后,您可以使用正确的数据类型重新定义列

标签: mysql datediff


【解决方案1】:

使用STR_TO_DATE 将文本转换为日期

select p.`Brand.Name`, datediff( STR_TO_DATE(`p`.`Pdo.Date`,"%m/%d/%Y"), STR_TO_DATE(`f`.`EntryDate`,"%m/%d/%Y")) 
from packaging as p
join volumes as v using(batchNum)
join fermentation as f on v.`LineNum` = f.`QC.LineId` 
group by `Brand.Name`; 

【讨论】:

  • 很好,这是可行的,我不必更改数据类型。如果我想将数据类型更改为日期,有没有办法可以做到这一点,同时还将当前格式更改为 yyyy-mm-dd?
  • 您必须使用相同的 STR_TO _DATE 来重写所有行,并更改数据类型,但与往常一样,在更改任何内容之前先备份
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2011-06-13
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多