Skip to content

Latest commit

 

History

History
executable file
·
528 lines (450 loc) · 11.1 KB

Date_and_time_functions.md

File metadata and controls

executable file
·
528 lines (450 loc) · 11.1 KB

日期和时间函数

请注意,CURTIME()UTC_TIME()UTC_TIMESTAMP()TIMEDIFF() 可以通过使用任意转换函数(例如 BIGINT()DOUBLE() 等)提升为数值类型。

NOW()

返回当前整数时间戳。

select NOW();
+------------+
| NOW()      |
+------------+
| 1615788407 |
+------------+

CURTIME()

hh:ii:ss 格式返回本地时区的当前时间。

select CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 07:06:30  |
+-----------+

CURDATE()

YYYY-MM-DD 格式返回本地时区的当前日期。

select curdate();
+------------+
| curdate()  |
+------------+
| 2023-08-02 |
+------------+

UTC_TIME()

hh:ii:ss 格式返回 UTC 时区的当前时间。

select UTC_TIME();
+------------+
| UTC_TIME() |
+------------+
| 06:06:18   |
+------------+

UTC_TIMESTAMP()

YYYY-MM-DD hh:ii:ss 格式返回 UTC 时区的当前时间。

select UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP()     |
+---------------------+
| 2021-03-15 06:06:03 |
+---------------------+

SECOND()

根据当前时区从时间戳参数中返回秒数整数(范围 0..59)。

select second(now());
+---------------+
| second(now()) |
+---------------+
| 52            |
+---------------+

MINUTE()

根据当前时区从时间戳参数中返回分钟整数(范围 0..59)。

select minute(now());
+---------------+
| minute(now()) |
+---------------+
| 5             |
+---------------+

HOUR()

根据当前时区从时间戳参数中返回小时整数(范围 0..23)。

select hour(now());
+-------------+
| hour(now()) |
+-------------+
| 7           |
+-------------+

DAY()

根据当前时区从时间戳参数中返回日期整数(范围 1..31)。

select day(now());
+------------+
| day(now()) |
+------------+
| 15         |
+------------+

MONTH()

根据当前时区从时间戳参数中返回月份整数(范围 1..12)。

select month(now());
+--------------+
| month(now()) |
+--------------+
| 3            |
+--------------+

QUARTER()

返回时间戳参数中的年份季度整数(范围 1..4),根据当前时区。

select quarter(now());
+----------------+
| quarter(now()) |
+----------------+
| 2              |
+----------------+

YEAR()

返回时间戳参数中的年份整数(范围 1969..2038),根据当前时区。

select year(now());
+-------------+
| year(now()) |
+-------------+
| 2024        |
+-------------+

DAYNAME()

返回给定时间戳参数的星期几名称,根据当前时区。

select dayname(now());
+----------------+
| dayname(now()) |
+----------------+
| Wednesday      |
+----------------+

MONTHNAME()

返回给定时间戳参数的月份名称,根据当前时区。

select monthname(now());
+------------------+
| monthname(now()) |
+------------------+
| August           |
+------------------+

DAYOFWEEK()

返回给定时间戳参数的星期几整数索引(范围 1..7),根据当前时区。请注意,星期从周日开始。

select dayofweek(now());
+------------------+
| dayofweek(now()) |
+------------------+
| 5                |
+------------------+

DAYOFYEAR()

返回给定时间戳参数的年度天数整数(范围 1..366),根据当前时区。

select dayofyear(now());
+------------------+
| dayofyear(now()) |
+------------------+
|              214 |
+------------------+

YEARWEEK()

返回给定时间戳参数的整数年份和当前周的第一天代码(范围 1969001..2038366),根据当前时区。

select yearweek(now());
+-----------------+
| yearweek(now()) |
+-----------------+
|         2023211 |
+-----------------+

YEARMONTH()

返回时间戳参数中的年份和月份代码整数(范围 196912..203801),根据当前时区。

select yearmonth(now());
+------------------+
| yearmonth(now()) |
+------------------+
| 202103           |
+------------------+

YEARMONTHDAY()

返回基于当前时区的年份、月份和日期代码整数(范围 19691231 到 20380119)。

select yearmonthday(now());
+---------------------+
| yearmonthday(now()) |
+---------------------+
| 20210315            |
+---------------------+

TIMEDIFF()

计算两个时间戳之间的差异,格式为 hh:ii:ss

select timediff(1615787586, 1613787583);
+----------------------------------+
| timediff(1615787586, 1613787583) |
+----------------------------------+
| 555:33:23                        |
+----------------------------------+

DATEDIFF()

计算两个时间戳之间的天数差异。

select datediff(1615787586, 1613787583);
+----------------------------------+
| datediff(1615787586, 1613787583) |
+----------------------------------+
|                               23 |
+----------------------------------+

DATE()

将时间戳参数中的日期部分格式化为 YYYY-MM-DD 字符串。

select date(now());
+-------------+
| date(now()) |
+-------------+
| 2023-08-02  |
+-------------+

TIME()

将时间戳参数中的时间部分格式化为 HH:MM:SS 字符串。

select time(now());
+-------------+
| time(now()) |
+-------------+
| 15:21:27    |
+-------------+

DATE_FORMAT()

根据提供的日期和格式参数返回格式化的字符串。格式参数使用与 strftime 函数相同的说明符。为了方便,以下是一些常用的格式说明符:

  • %Y - 四位数年份
  • %m - 两位数月份(01-12)
  • %d - 两位数日期(01-31)
  • %H - 两位数小时(00-23)
  • %M - 两位数分钟(00-59)
  • %S - 两位数秒(00-59)
  • %T - 24小时制时间(%H:%M:%S

请注意,这不是说明符的完整列表。请查阅您的操作系统 strftime() 的文档以获取完整列表。

SELECT DATE_FORMAT(NOW(), 'year %Y and time %T');
+------------------------------------------+
| DATE_FORMAT(NOW(), 'year %Y and time %T') |
+------------------------------------------+
| year 2023 and time 11:54:52              |
+------------------------------------------+

此示例格式化当前日期和时间,显示四位数年份和 24 小时制时间。

DATE_HISTOGRAM()

DATE_HISTOGRAM(expr, {calendar_interval='unit_name'}) 使用单位名称作为桶大小并返回该值的桶号。值会被舍入到最接近的桶。关键函数为:

key_of_the_bucket = interval * floor ( value / interval )

间隔使用单位名称指定,如 week1M。不支持多个单位组合(如 2w)。

有效的间隔有:

  • minute, 1m
  • hour, 1h
  • day, 1d
  • week, 1w
  • month, 1M
  • year, 1y

用于聚合、FACET 和分组。

示例:

SELECT COUNT(*),
DATE_HISTOGRAM(tm, {calendar_interval='month'}) AS months
FROM facets
GROUP BY months ORDER BY months ASC;

DATE_RANGE()

DATE_RANGE(expr, {range_from='date_math', range_to='date_math'}) 接受一组范围并返回该值的桶号。表达式包括 range_from 值并排除 range_to 值。范围可以是开放的 - 仅包含 range_from 或仅包含 range_to 值。与 RANGE() 函数的不同之处在于,range_fromrange_to 值可以用 Date math 表达式表示。

用于聚合、FACET 和分组。

示例

SELECT COUNT(*),
DATE_RANGE(tm, {range_to='2017||+2M/M'},{range_from='2017||+2M/M',range_to='2017||+5M/M'},{range_from='2017||+5M/M'}) AS points
FROM idx_dates
GROUP BY points ORDER BY points ASC;
日期数学

日期数学允许您在搜索中直接处理日期和时间。它对于处理随时间变化的数据尤其有用。通过日期数学,您可以轻松执行以下操作:查找特定时期的条目、分析数据趋势或管理何时删除信息。它通过让您能够在给定日期上加减时间、将日期舍入到最近的时间单位等方式,简化了日期的处理,这些操作都可以在您的搜索查询中进行。

要使用日期数学,您可以从一个基准日期开始,它可以是:

  • now 代表当前日期和时间,
  • 或者以 || 结尾的特定日期字符串。

然后,您可以使用以下操作来修改此日期:

  • +1y 表示增加一年,
  • -1h 表示减少一小时,
  • /m 表示舍入到最近的月份。

在这些操作中,您可以使用以下时间单位:

  • s 代表秒,
  • m 代表分钟,
  • h(或 H)代表小时,
  • d 代表天,
  • w 代表周,
  • M 代表月,
  • y 代表年。

以下是一些日期数学的使用示例:

  • now+4h 表示从现在起四小时后。
  • now-2d/d 表示两天前的时间,并舍入到最近的一天。
  • 2010-04-20||+2M/d 表示 2010 年 6 月 20 日,并舍入到最近的一天。