From fdb6b0c6d25ed1995633390e9111790582143650 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 18 Jul 2022 12:33:45 +0800 Subject: [PATCH] feat: WEEKDAY logic for pg --- .../lib/sql/functionMappings/pg.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts index 21d8ff53ea..2fdef7fa39 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts @@ -42,6 +42,25 @@ const pg = { )}')::interval${colAlias}` ); }, + WEEKDAY: ({ fn, knex, pt, colAlias }: MapFnArgs) => { + // isodow: the day of the week as Monday (1) to Sunday (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, + }; + const offset = m[pt?.arguments[1]?.value.toLowerCase()] || 0; + return knex.raw( + `(EXTRACT(ISODOW FROM ${fn( + pt.arguments[0] + )}) - 1 - ${offset} % 7 + 7) % 7 ${colAlias}` + ); + }, }; export default pg;