diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-03-12 10:17:16 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-03-12 10:17:16 +0000 |
commit | 7457677bc603569692329e39a59ccb018306e2a6 (patch) | |
tree | bb16c8f909bfbf7ff272cd8ef14a413c47b203fe /sqlglot/dialects/sqlite.py | |
parent | Releasing debian version 11.3.3-1. (diff) | |
download | sqlglot-7457677bc603569692329e39a59ccb018306e2a6.tar.xz sqlglot-7457677bc603569692329e39a59ccb018306e2a6.zip |
Merging upstream version 11.3.6.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/sqlite.py')
-rw-r--r-- | sqlglot/dialects/sqlite.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sqlglot/dialects/sqlite.py b/sqlglot/dialects/sqlite.py index fb99d49..ed7c741 100644 --- a/sqlglot/dialects/sqlite.py +++ b/sqlglot/dialects/sqlite.py @@ -92,6 +92,33 @@ class SQLite(Dialect): exp.GroupConcat: _group_concat_sql, } + def datediff_sql(self, expression: exp.DateDiff) -> str: + unit = expression.args.get("unit") + unit = unit.name.upper() if unit else "DAY" + + sql = f"(JULIANDAY({self.sql(expression, 'this')}) - JULIANDAY({self.sql(expression, 'expression')}))" + + if unit == "MONTH": + sql = f"{sql} / 30.0" + elif unit == "YEAR": + sql = f"{sql} / 365.0" + elif unit == "HOUR": + sql = f"{sql} * 24.0" + elif unit == "MINUTE": + sql = f"{sql} * 1440.0" + elif unit == "SECOND": + sql = f"{sql} * 86400.0" + elif unit == "MILLISECOND": + sql = f"{sql} * 86400000.0" + elif unit == "MICROSECOND": + sql = f"{sql} * 86400000000.0" + elif unit == "NANOSECOND": + sql = f"{sql} * 8640000000000.0" + else: + self.unsupported("DATEDIFF unsupported for '{unit}'.") + + return f"CAST({sql} AS INTEGER)" + def fetch_sql(self, expression): return self.limit_sql(exp.Limit(expression=expression.args.get("count"))) |