Browse Source

fix(nocodb): use strftime for sqlite date time sql

pull/4809/head
Wing-Kam Wong 2 years ago
parent
commit
c351349186
  1. 19
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/sqlite.ts

19
packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/sqlite.ts

@ -109,33 +109,28 @@ const sqlite3 = {
const unit = convertUnits(rawUnit, 'sqlite'); const unit = convertUnits(rawUnit, 'sqlite');
switch (unit) { switch (unit) {
case 'seconds': case 'seconds':
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) * 86400)`; sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2}))`;
break; break;
case 'minutes': case 'minutes':
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) * 1440)`; sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) / 60`;
break; break;
case 'hours': case 'hours':
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) * 24)`; sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) / 3600`;
break; break;
case 'milliseconds': case 'milliseconds':
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) * 86400000)`; sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) * 1000`;
break; break;
case 'weeks': case 'weeks':
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 7)`; sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 7)`;
break; break;
case 'months': case 'months':
sql = `(ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 365)) sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 12 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) `;
* 12 + (ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 365 / 12))`;
break; break;
case 'quarters': case 'quarters':
sql = ` sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 4 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) / 3`;
ROUND((JULIANDAY(${datetime_expr1})) / 365 / 4) -
ROUND((JULIANDAY(${datetime_expr2})) / 365 / 4) +
(ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 365)) * 4
`;
break; break;
case 'years': case 'years':
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 365)`; sql = `strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})`;
break; break;
case 'days': case 'days':
sql = `JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})`; sql = `JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})`;

Loading…
Cancel
Save