可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

DATEDIFF

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

减去两个 SQL DATE 类型(由 java.sql.Date 表示)。

此函数有两种形式

MySQL 2 参数版本

在 MySQL 中,DATEDIFF() 函数有一个 2 参数版本,其结果生成两个日期之间的天数。参数顺序与差分表示法相同:end_date - start_date

SELECT DATEDIFF(
  DATE '2020-02-03',
  DATE '2020-02-01');
create.select(dateDiff(
  Date.valueOf("2020-02-03"),
  Date.valueOf("2020-02-01"))).fetch();

结果是

+------------+
| datediff   |
+------------+
|          2 |
+------------+

方言支持

此示例使用 jOOQ

dateDiff(Date.valueOf("2020-02-03"), Date.valueOf("2020-02-01"))

翻译成以下特定方言的表达式

访问

datediff('d', #2020/02/01#, #2020/02/03#)

ASE,Sybase

datediff(DAY, '2020-02-01', '2020-02-03')

Aurora MySQL,MariaDB,MySQL

datediff(DATE '2020-02-03', DATE '2020-02-01')

Aurora Postgres,CockroachDB,Oracle,Postgres,YugabyteDB

(DATE '2020-02-03' - DATE '2020-02-01')

BigQuery

date_diff(DATE '2020-02-03', DATE '2020-02-01', DAY)

ClickHouse,Teradata

CAST((DATE '2020-02-03' - DATE '2020-02-01') AS integer)

Databricks,Exasol

CAST((DATE '2020-02-03' - DATE '2020-02-01') AS int)

DB2

(days(DATE '2020-02-03') - days(DATE '2020-02-01'))

Derby

{fn timestampdiff(sql_tsi_day, DATE('2020-02-01'), DATE('2020-02-03')) }

DuckDB,Redshift

datediff('day', DATE '2020-02-01', DATE '2020-02-03')

Firebird,H2,HSQLDB,Snowflake,Vertica

datediff(DAY, DATE '2020-02-01', DATE '2020-02-03')

Hana

days_between(DATE '2020-02-01', DATE '2020-02-03')

Informix

CAST((DATETIME(2020-02-03) YEAR TO DAY - DATETIME(2020-02-01) YEAR TO DAY) AS integer)

MemSQL

datediff({d '2020-02-03'}, {d '2020-02-01'})

SQLDataWarehouse,SQLServer

datediff(DAY, CAST('2020-02-01' AS date), CAST('2020-02-03' AS date))

SQLite

(strftime('%s', '2020-02-03') - strftime('%s', '2020-02-01')) / 86400

Trino

date_diff('day', DATE '2020-02-01', DATE '2020-02-03')
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

SQL Server 3 参数版本

在 SQL Server 中,DATEDIFF() 函数有一个 3 参数版本,其结果生成两个日期之间的日期部分周期数,日期被 TRUNC 到相关的日期部分。参数顺序与间隔表示法相同:[start_date, end_date]

SELECT DATEDIFF(
  MONTH
  DATE '2020-02-03',
  DATE '2020-04-01');
create.select(dateDiff(
  DatePart.MONTH,
  Date.valueOf("2020-02-03"),
  Date.valueOf("2020-04-01"))).fetch();

结果是

+------------+
| datediff   |
+------------+
|          2 |
+------------+

请注意在计算差异之前发生的截断。结果与以下结果相同

SELECT DATEDIFF(
  MONTH
  DATE '2020-02-01',
  DATE '2020-04-01');
create.select(dateDiff(
  DatePart.MONTH,
  Date.valueOf("2020-02-01"),
  Date.valueOf("2020-04-01"))).fetch();

方言支持

此示例使用 jOOQ

dateDiff(DatePart.MONTH, Date.valueOf("2020-02-03"), Date.valueOf("2020-04-01"))

翻译成以下特定方言的表达式

Aurora MySQL,Aurora Postgres,CockroachDB,Hana,MariaDB,MySQL,Oracle,Postgres,YugabyteDB

(((extract(YEAR FROM DATE '2020-04-01') - extract(YEAR FROM DATE '2020-02-03')) * 12) + (extract(MONTH FROM DATE '2020-04-01') - extract(MONTH FROM DATE '2020-02-03')))

BigQuery

date_diff(DATE '2020-04-01', DATE '2020-02-03', MONTH)

DB2

(((YEAR(DATE '2020-04-01') - YEAR(DATE '2020-02-03')) * 12) + (MONTH(DATE '2020-04-01') - MONTH(DATE '2020-02-03')))

Derby

(((YEAR(DATE('2020-04-01')) - YEAR(DATE('2020-02-03'))) * 12) + (MONTH(DATE('2020-04-01')) - MONTH(DATE('2020-02-03'))))

Firebird,H2,HSQLDB,Snowflake

datediff(MONTH, DATE '2020-02-03', DATE '2020-04-01')

MemSQL

(((extract(YEAR FROM {d '2020-04-01'}) - extract(YEAR FROM {d '2020-02-03'})) * 12) + (extract(MONTH FROM {d '2020-04-01'}) - extract(MONTH FROM {d '2020-02-03'})))

Redshift

datediff('month', DATE '2020-02-03', DATE '2020-04-01')

SQLDataWarehouse,SQLServer

datediff(MONTH, CAST('2020-02-03' AS date), CAST('2020-04-01' AS date))

ASE,Access,ClickHouse,Databricks,DuckDB,Exasol,Informix,SQLite,Sybase,Teradata,Trino,Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的声音!

The jOOQ Logo