• 日期和时间函数
请注意,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 )间隔使用单位名称指定,如 week 或 1M。不支持多个单位组合(如 2w)。
有效的间隔有:
minute,1mhour,1hday,1dweek,1wmonth,1Myear,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_from 和 range_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 日,并舍入到最近的一天。
最后更新于