У меня есть приведенная ниже структура таблицы.
Tax | FromDate | EndDate
12.32 | 12-29-2020 | 12-29-2021
Ставка налога 12,32 действительна от FromDate
до EndDate
. 12.32 следует выбирать, когда указывается диапазон дат, который находится между FromDate
и EndDate
.
. Я попытался выполнить приведенный ниже запрос, однако он не дает правильного результата при пропуске @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) в качестве типа данных для столбцов, а также для значений входных параметров. Я выбрал VARCHAR (45), потому что использование типа DATE выдает ошибку при работе с mm-dd-гггг.
Где я ошибся?
Ниже приведен пример кода.
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')
Согласно приведенному выше коду, он должен вернуть строку. Но он не возвращается.