UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

39 lines (38 loc) 1.28 kB
import { sql } from "kysely"; import { STANDARD_DATE_FORMAT } from "../scripts/datautil"; export function concat(...exprs) { return sql.join(exprs, sql `||`).$castTo(); } export function expandToRows(expr, regexp) { return sql `unnest(regexp_matches(${expr}, ${regexp}, 'g'))`; } export function nullIf(expr) { return sql `nullif(trim(${expr}), '')`; } export function removeSubstring(expr, pattern) { return replace(expr, pattern, sql.val("")); } export function replace(expr, pattern, replacement) { return sql `replace(${expr}, ${pattern}, ${replacement})`; } export function rtrim(expr) { return sql `rtrim(${expr})`; } export function toDateString(expr, format = sql.val(STANDARD_DATE_FORMAT)) { return sql `to_char(${expr}, ${format})`; } export function toCRDate(dateISO, startTime) { const yyyymmdd = dateISO.replace(/-/g, ""); // "20250716" let hh = "00", mm = "00", ss = "00", SSS = "000"; if (startTime) { // accepte "HH:MM:SS", "HH:MM:SS.mmm", "HH:MM:SS.mmm+02:00" const m = startTime.match(/(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?/); if (m) { hh = m[1]; mm = m[2]; ss = m[3]; SSS = m[4] || "000"; } } return `${yyyymmdd}${hh}${mm}${ss}${SSS}`; }