SQL时间函数用法总结(Mysql)附:工作中常用的hive_sql的时间函数用法

MySQL和HiveSQL时间函数差不多。
Hive功能少点。

CURRENT_DATE比CURDATE简单。
CURRENT_TIME比CURTIME简单。
UNIX_TIMESTAMP用法一样。

FROM_UNIXTIME在Hive里格式化更省事。
DATE_FORMAT Hive用得少。

DATE_ADD和DATE_SUB结果数字格式不一样。
Hive返回字符串。
MySQL返回日期类型。

DATEDIFF和TIMESTAMPDIFF功能一样。
Hive效率低点。

怎么用这些函数更方便?你自己看。

mysql 获取前一天日期

直接用 DATE_SUB(CURDATE(), INTERVAL 1 DAY) 获取前一天日期。

比如查 2 02 3 -1 0-2 6 的数据,写 SELECT FROM sales WHERE date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)。

也可以 DATE_ADD(CURDATE(), INTERVAL -1 DAY),但减负数容易搞混。

业务里常用,比如查昨天的订单 SELECT FROM orders WHERE order_date = DATE_SUB(NOW(), INTERVAL 1 DAY)。

你自己掂量。

MySQL的日期函数获取当前年份mysql当前年份

说实话,我当年刚接触MySQL那会儿,对YEAR()函数还真挺依赖的。
记得有次做报表,老板突然要按年份汇总销售数据,当时表里存的都是DATETIME类型的字段,直接套个YEAR(sale_date)就搞定,比硬编码查条件省事多了。

有意思的是,这个函数特别宽容。
你给个'2 02 3 -05 -1 5 '这种标准日期,或者'2 3 :4 5 :00'这种只有时间的时间戳,它都能正确抽年份。
我试过给个'2 02 3 -05 -1 5 2 3 :4 5 :00',结果直接输出2 02 3 ,完全不用管后面的时分秒。
这点挺省心的,至少不用自己再加个STR_TO_DATE转一下。

不过要说踩坑,有一次我写了个带默认值的插入语句,本来想用YEAR(CURDATE())当默认年份,结果忘了加括号写成YEAR CURDATE(),直接报错。
当时我就懵了,心想这函数咋还挑食呢?后来才知道,MySQL解析器先看到YEAR,以为是函数名,再看到CURDATE(),发现没跟括号,就炸了。
这点得特别小心。

数据我记得是5 .7 版本开始稳定支持吧,反正我用的时候是5 .7 以上的环境,没遇到过兼容问题。
但你要是碰上更老的版本,最好还是查查手册确认下,毕竟数据库升级不是小事。

块儿没亲自跑过,但可以肯定的是,如果你在处理大量日期数据,YEAR()绝对是那个随手就能用的利器。
比如有次我处理过一批日志文件,里面时间是ISO8 6 01 格式,直接YEAR(STR_TO_DATE(log_time, '%Y-%m-%dT%H:%i:%s'))就能抽年份,比用正则匹配省事儿多了。
当时我还琢磨,要是MySQL能直接对字符串解析日期就好了,现在想想,可能5 .7 以后有了更方便的函数,但我没深入研究过。

MySQL日期匹配和随机月份查询:如何解决随机函数导致结果不一致的问题?

上周,我那个朋友遇到了一个数据库查询问题。
他们在使用RAND()函数时,发现重复执行导致随机日期范围不一致。
这主要是因为RAND()在WHERE条件中每次都会重新计算,导致结果不稳定。

2 02 3 年,他们尝试了几个解决方案。
首先,他们通过MySQL8 的WITH语句限制RAND()仅执行一次,这样可以生成固定的随机月份,避免了重复计算的问题。
他们还尝试了参数化查询,将随机月份作为参数传入,这样SQL结构更简洁,易于调试。

另外,他们还提到了索引优化,避免在查询列上使用函数,改用范围查询或直接比较。
比如,如果create_time有索引,他们可以直接使用范围查询来提升查询速度。

最后,他们推荐了一个组合方案:在应用层生成随机月份,传入SQL后使用范围查询,并确保create_time列有索引。
这个方案兼顾了结果一致性、查询效率与代码可维护性,适用于大多数生产环境。

不过,这部分我不确定他们最终选择了哪个方案。
你看着办吧。