@tricoteuses/senat
Version:
Handle French Sénat's open data
39 lines (38 loc) • 1.28 kB
JavaScript
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}`;
}