Browse Source

Merge pull request #4821 from nocodb/fix/sqlite-datetime-diff

fix: sqlite datetime diff
pull/4831/head
աɨռɢӄաօռɢ 2 years ago committed by GitHub
parent
commit
3a6cd360bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts
  2. 18
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/sqlite.ts
  3. 22
      tests/playwright/tests/columnFormula.spec.ts

2
packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts

@ -91,7 +91,7 @@ const pg = {
DATE_PART('year', AGE(${datetime_expr2}, '1900/01/01')) * 4) - 1)`;
break;
case 'year':
sql = `DATE_PART('year', ${datetime_expr1}::TIMESTAMP) - DATE_PART('year', ${datetime_expr2}::TIMESTAMP)`;
sql = `DATE_PART('year', AGE(${datetime_expr1}, ${datetime_expr2}))`;
break;
case 'day':
sql = `DATE_PART('day', ${datetime_expr1}::TIMESTAMP - ${datetime_expr2}::TIMESTAMP)`;

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

@ -130,7 +130,23 @@ const sqlite3 = {
sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 4 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) / 3`;
break;
case 'years':
sql = `strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})`;
sql = `CASE
WHEN (${datetime_expr2} < ${datetime_expr1}) THEN
(
(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2}))
- (strftime('%m', ${datetime_expr1}) < strftime('%m', ${datetime_expr2})
OR (strftime('%m', ${datetime_expr1}) = strftime('%m', ${datetime_expr2})
AND strftime('%d', ${datetime_expr1}) < strftime('%d', ${datetime_expr2})))
)
WHEN (${datetime_expr2} > ${datetime_expr1}) THEN
-1 * (
(strftime('%Y', ${datetime_expr2}) - strftime('%Y', ${datetime_expr1}))
- (strftime('%m', ${datetime_expr2}) < strftime('%m', ${datetime_expr1})
OR (strftime('%m', ${datetime_expr2}) = strftime('%m', ${datetime_expr1})
AND strftime('%d', ${datetime_expr2}) < strftime('%d', ${datetime_expr1})))
)
ELSE 0
END`;
break;
case 'days':
sql = `JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})`;

22
tests/playwright/tests/columnFormula.spec.ts

@ -38,6 +38,10 @@ const formulaDataByDbType = (context: NcContext) => [
formula: `DATETIME_DIFF("2022/10/14", "2022/10/15", "minutes")`,
result: ['-1440', '-1440', '-1440', '-1440', '-1440'],
},
{
formula: `DATETIME_DIFF("2023/10/14", "2023/01/13", "minutes")`,
result: ['394560', '394560', '394560', '394560', '394560'],
},
{
formula: `DATETIME_DIFF("2022/10/14", "2022/10/15", "seconds")`,
result: ['-86400', '-86400', '-86400', '-86400', '-86400'],
@ -67,19 +71,31 @@ const formulaDataByDbType = (context: NcContext) => [
result: ['-1', '-1', '-1', '-1', '-1'],
},
{
formula: `DATETIME_DIFF(NOW(), "2023/10/14", "y")`,
formula: `DATETIME_DIFF("2023/01/12", "2023/10/14", "y")`,
result: ['0', '0', '0', '0', '0'],
},
{
formula: `DATETIME_DIFF("2023/10/14", NOW(), "y")`,
formula: `DATETIME_DIFF("2023/10/14", "2023/01/12", "y")`,
result: ['0', '0', '0', '0', '0'],
},
{
formula: `DATETIME_DIFF("2023-01-12", "2021-08-29", "y")`,
result: ['1', '1', '1', '1', '1'],
},
{
formula: `DATETIME_DIFF("2021-01-12", "2026-01-29", "y")`,
result: ['-5', '-5', '-5', '-5', '-5'],
},
{
formula: `DATETIME_DIFF("1990-01-12", "2046-12-29", "y")`,
result: ['-56', '-56', '-56', '-56', '-56'],
},
{
formula: `DATETIME_DIFF("2022/10/14", "2023/10/14", "d")`,
result: ['-365', '-365', '-365', '-365', '-365'],
},
{
formula: `DATETIME_DIFF("2022/10/14", NOW(), "d")`,
formula: `DATETIME_DIFF("2022/10/14", "2023/01/12", "d")`,
result: ['-90', '-90', '-90', '-90', '-90'],
},
{

Loading…
Cancel
Save