From 6064f9f20190a5ce027495f42e90752cddad7aa3 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 18 Jul 2022 13:42:07 +0800 Subject: [PATCH] feat: WEEKDAY logic for mssql --- .../lib/sql/functionMappings/mssql.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mssql.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mssql.ts index a95f69e6c4..78c4f5c142 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mssql.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mssql.ts @@ -108,6 +108,24 @@ const mssql = { END${colAlias}` ); }, + WEEKDAY: ({ fn, knex, pt, colAlias }: MapFnArgs) => { + // DATEPART(WEEKDAY, DATE): sunday = 1, monday = 2, ..., saturday = 7 + // 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, + }; + return knex.raw( + `(DATEPART(WEEKDAY, ${fn(pt.arguments[0])}) - 2 - ${ + m[pt?.arguments[1]?.value.toLowerCase()] || 0 + } % 7 + 7) % 7 ${colAlias}` + ); + }, }; export default mssql;