From 8748407bd03f381d903eb269093f968afcc5bb24 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 8 Jul 2022 20:01:10 +0800 Subject: [PATCH] feat: WEEKDAY logic for mysql --- .../lib/sql/functionMappings/mysql.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts index 9b34375394..784b3046d5 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts @@ -55,6 +55,27 @@ const mysql2 = { END${colAlias}` ); }, + WEEKDAY: ({ fn, knex, pt, colAlias }: MapFnArgs) => { + // WEEKDAY() returns an index from 0 to 6 for Monday to Sunday + const m = { + monday: 0, + tuesday: 1, + wednesday: 2, + thursday: 3, + friday: 4, + saturday: 5, + sunday: 6, + }; + const offset = m[pt?.arguments[1]?.value] || 0; + return knex.raw( + `CASE + WHEN WEEKDAY(${fn(pt.arguments[0])}) >= ${offset} THEN + WEEKDAY(${fn(pt.arguments[0])}) - ${offset} + ELSE + 7 - ${offset} + WEEKDAY(${fn(pt.arguments[0])}) + END${colAlias}` + ); + }, }; export default mysql2;