问题描述
SELECT * FROM TABLE_NAME where dateSold <= '01/01/2021' and dateSold > '12/01/2020' and cardId = 'BZPcJP3eXaJLT3J' and ImageAccepted = 'accepted' order by dateSold asc
这不会返回表中的任何内容,但有条目,见下图。
解决方法
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_sold
是 date 数据类型,那么您将使用:
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