微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL 没有返回上个月的数据,因为我们在新的一年

如何解决MySQL 没有返回上个月的数据,因为我们在新的一年

我有以下 sql

SELECT * FROM TABLE_NAME where dateSold <= '01/01/2021' and dateSold > '12/01/2020' and cardId = 'BZPcJP3eXaJLT3J' and ImageAccepted = 'accepted' order by dateSold asc

这不会返回表中的任何内容,但有条目,见下图。

enter image description here

解决方法

Date 使用 varChar 不是一个好习惯。

您可以在当前 varChar 字段上运行以下命令。

SELECT * FROM TABLE_NAME where str_to_date(dateSold,'%m/%d/%Y') <= '01/01/2021' 
AND str_to_date(dateSold,'%m/%d/%Y') > '12/01/2020' 
AND cardId = 'BZPcJP3eXaJLT3J' 
AND ImageAccepted = 'accepted' 
ORDER BY date_format(str_to_date(dateSold,'%m/%d/%Y') ASC;

您可以通过创建一个默认为 NULL 的新 'Date' 字段将 varChar 数据转换为 Date,并通过运行以下命令将数据从 'dateSold' 复制到新字段:

Update TABLE_NAME set dateNew = date(str_to_date(dateSol,'%m/%d/%Y'));

运行此命令后,从默认值中删除 Null。

,

假设 date_solddate 数据类型,那么您将使用:

SELECT *
FROM TABLE_NAME 
WHERE dateSold <= '2021-01-01' AND
      dateSold > '2020-01-01' AND
      cardId = 'BZPcJP3eXaJLT3J' AND 
      ImageAccepted = 'accepted' 
ORDER BY dateSold asc;

如果它没有被存储为日期,那么您应该修复数据模型。同时,您可以使用字符串操作。

WHERE dateSold LIKE '%-2020'
      cardId = 'BZPcJP3eXaJLT3J' AND 
      ImageAccepted = 'accepted' 
ORDER BY dateSold asc;

如果值不是以字符串形式存储,则不要使用字符串操作。。修复数据模型,以便使用正确的数据类型存储值。

,

您应该使用 DATE 数据类型来存储日期,因为如果您不这样做,就像当前的情况一样,您必须先将格式 mm/dd/YYYY 转换为 DATE然后与日期进行比较。
您将需要函数 STR_TO_DATE():

SELECT * 
FROM TABLE_NAME 
WHERE STR_TO_DATE(dateSold,'%m/%d/%Y') <= '2021-01-01' 
  AND STR_TO_DATE(dateSold,'%m/%d/%Y') > '2020-12-01' 
  AND cardId = 'BZPcJP3eXaJLT3J' 
  AND ImageAccepted = 'accepted' 
ORDER BY STR_TO_DATE(dateSold,'%m/%d/%Y') ASC

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。