【发布时间】:2020-07-31 01:34:18
【问题描述】:
我有下表结构。
Tax | FromDate | EndDate
12.32 | 12-29-2020 | 12-29-2021
税率 12.32 从FromDate 到EndDate 有效。指定FromDate 和EndDate 之间的日期范围时应选择12.32。
我尝试了以下查询,但是通过 @startdate 和 @enddate 时它没有给我有效的输出。
SELECT Tax
FROM Table
WHERE
DATE_FORMAT(@startDate, '%m-%d-%y') >= DATE_FORMAT(t.fromDate, '%m-%d-%y')
AND DATE_FORMAT(@endDate, '%m-%d-%y') <= DATE_FORMAT(t.endDate, '%m-%d-%y') LIMIT 1;
目前,我使用 VARCHAR(45) 作为列的 DataType 以及输入参数值的 DataType。我选择了 VARCHAR(45),因为在处理 mm-dd-yyyy 时使用 DATE 类型会引发错误。
我哪里出错了?
下面是示例代码。
SET @startDate = '07-29-2019';
SET @endDate = '09-29-2019';
DROP TEMPORARY TABLE IF EXISTS Dates;
CREATE TEMPORARY TABLE Dates (StartDate VARCHAR(20),EndDate VARCHAR(20),Tax INT);
INSERT INTO Dates VALUES ('06-29-2019','06-29-2020',1);
SELECT *
FROM Dates
WHERE
STR_TO_DATE(@startDate, '%m-%d-%y') <= STR_TO_DATE(EndDate, '%m-%d-%y')
AND STR_TO_DATE(@endDate, '%m-%d-%y') >= STR_TO_DATE(StartDate, '%m-%d-%y')
根据上面的代码,它应该返回一行。但它没有返回。
【问题讨论】:
-
当我们决定(不明智地)将日期值存储在 VARCHAR 而不是
DATE数据类型中时,我们开始偏离轨道...... SQL 语法 trainwreck 是该决定的结果。 (该问题的解决方法是弄清楚如何将日期存储到 DATE 列中。)参考:dev.mysql.com/doc/refman/8.0/en/datetime.html -
SELECT STR_TO_DATE( '12-29-2020' ,'%m-%d-%Y') AS date_val -
INSERT INTO my_table ( date_col ) VALUES ( STR_TO_DATE( '12-29-2021' ,'%m-%d-%Y') ) -
您的案例已经有 2 个 cmets。将
y更改为Y。
标签: mysql sql date where-clause date-format