Skip to content
Snippets Groups Projects
Verified Commit d9210d85 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: fix for date query filters with <= or >=

parent 2cda2f22
No related branches found
No related tags found
No related merge requests found
...@@ -106,15 +106,20 @@ DELIMITER // ...@@ -106,15 +106,20 @@ DELIMITER //
CREATE FUNCTION db_2_0.getDateWhereClause(vDateTimeDotNotation VARCHAR(255), operator CHAR(4)) RETURNS VARCHAR(20000) DETERMINISTIC CREATE FUNCTION db_2_0.getDateWhereClause(vDateTimeDotNotation VARCHAR(255), operator CHAR(4)) RETURNS VARCHAR(20000) DETERMINISTIC
BEGIN BEGIN
DECLARE isInterval INTEGER DEFAULT LOCATE('--',vDateTimeDotNotation); DECLARE isInterval INTEGER DEFAULT LOCATE('--',vDateTimeDotNotation);
-- ILB is short for Inclusive Lower Boundary
DECLARE vILB VARCHAR(255) DEFAULT IF(isInterval != 0, SUBSTRING_INDEX(vDateTimeDotNotation, '--', 1), vDateTimeDotNotation); DECLARE vILB VARCHAR(255) DEFAULT IF(isInterval != 0, SUBSTRING_INDEX(vDateTimeDotNotation, '--', 1), vDateTimeDotNotation);
-- EUB is short for Exclusive Upper Boundary
DECLARE vEUB VARCHAR(255) DEFAULT IF(isInterval != 0, SUBSTRING_INDEX(vDateTimeDotNotation, '--', -1), NULL); DECLARE vEUB VARCHAR(255) DEFAULT IF(isInterval != 0, SUBSTRING_INDEX(vDateTimeDotNotation, '--', -1), NULL);
DECLARE vILB_Date INTEGER DEFAULT SUBSTRING_INDEX(vILB, '.', 1); DECLARE vILB_Date INTEGER DEFAULT SUBSTRING_INDEX(vILB, '.', 1);
DECLARE vEUB_Date INTEGER DEFAULT SUBSTRING_INDEX(vEUB, '.', 1); DECLARE vEUB_Date INTEGER DEFAULT SUBSTRING_INDEX(vEUB, '.', 1);
-- hasTime is actually hasNotTime
DECLARE hasTime INTEGER DEFAULT LOCATE('.NULL.NULL',vILB); DECLARE hasTime INTEGER DEFAULT LOCATE('.NULL.NULL',vILB);
-- Day of Month (0-31, 0 means any)
DECLARE dom INTEGER DEFAULT vILB_Date % 100; DECLARE dom INTEGER DEFAULT vILB_Date % 100;
-- Month (0-12, 0 means any)
DECLARE mon INTEGER DEFAULT ((vILB_Date % 10000) - dom) / 100; DECLARE mon INTEGER DEFAULT ((vILB_Date % 10000) - dom) / 100;
-- Year
DECLARE yea INTEGER DEFAULT (vILB_Date - (vILB_Date % 10000)) / 10000; DECLARE yea INTEGER DEFAULT (vILB_Date - (vILB_Date % 10000)) / 10000;
SELECT vILB_Date != vEUB_Date INTO isInterval;
IF operator = '=' and hasTime != 0 THEN IF operator = '=' and hasTime != 0 THEN
RETURN CONCAT(" subdata.value=", vILB_Date); RETURN CONCAT(" subdata.value=", vILB_Date);
...@@ -161,6 +166,28 @@ BEGIN ...@@ -161,6 +166,28 @@ BEGIN
ELSE ELSE
RETURN CONCAT(" subdata.value>=",vEUB_Date); RETURN CONCAT(" subdata.value>=",vEUB_Date);
END IF; END IF;
ELSEIF operator = "<=" THEN
IF mon != 0 and dom != 0 THEN
-- Full date YYYY-MM-DD
RETURN CONCAT(" subdata.value<=",vILB_Date, " or (subdata.value<=", yea*10000 + mon*100, " and subdata.value%100=0)");
ELSEIF mon != 0 THEN
-- Date is fragment YYYY-MM
RETURN CONCAT(" subdata.value<",vEUB_Date);
ELSE
-- Date is fragment YYYY
RETURN CONCAT(" subdata.value<",vEUB_Date);
END IF;
ELSEIF operator = ">=" THEN
IF mon != 0 and dom != 0 THEN
-- Full date YYYY-MM-DD
RETURN CONCAT(" subdata.value>=",vILB_Date, " or (subdata.value>=", yea*10000 + mon*100, " and subdata.value%100=0) or (subdata.value>=", yea*10000, " and subdata.value%10000=0)");
ELSEIF mon != 0 THEN
-- Date is fragment YYYY-MM
RETURN CONCAT(" subdata.value>=", yea*10000 + mon*100, " or (subdata.value>=", yea*10000, " and subdata.value%10000=0)");
ELSE
-- Date is fragment YYYY
RETURN CONCAT(" subdata.value>=", yea*10000);
END IF;
END IF; END IF;
return ' 0=1'; return ' 0=1';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment