sql中怎么提取年份月份 提取年份月份的简单方法分享

上周阅读了文档。
SQL 提取年份和月份。
MySQL/SQL 服务器。
年()和月()。
直接使用即可。
选择年份(订单日期)作为订单年份, MONTH(order_date) AS order_month 来自订单;
处理零。
合并()。
设置默认值。
选择年份(COALESCE(order_date, '1 9 00-01 -01 ')) AS order_year, 月份(COALESCE(order_date, '1 9 00-01 -01 ')) AS order_month 来自订单;
转换为月份名称。
MySQL。
月份名称()。
选择 MONTHNAME(order_date) AS order_month_name 来自订单;
SQL 服务器。
日期名称()。
SELECT DATENAME(月, order_date) AS order_month_name 来自订单;
PostgreSQL/Oracle。
提炼()。
EXTRACT(YEAR FROM order date) AS 订单年份。
EXTRACT(MONTH FROM order_date) AS order_month。

处理零。
合并()。
SELECT EXTRACT(YEAR FROM COALESCE(order_date, DATE '1 9 00-01 -01 ')) AS order_year, EXTRACT(MONTH FROM COALESCE(order_date, DATE '1 9 00-01 -01 ')) AS order_month 来自订单;
转换为月份名称。
PostgreSQL。
TO_CHAR(日期,'月份')。
SELECT TO_CHAR(order_date, '月份') AS order_month_name 来自订单;
甲骨文。
TO_CHAR(日期,'月份')。
SELECT TO_CHAR(order_date, '月份') AS order_month_name 来自订单;
一般建议。
核心功能。
年(),月(),提取(),TO_CHAR()。

零处理。
COALESCE() 或 ISNULL()。

月份名称。
业务的需求。
直接转换或格式化。

算了。

MySQL如何每个月自动创建一张表,以年月做为表名

我上周看到了你的请求。
我也有类似的情况。
每个季度都会将零件添加到多个表中,表名称位于设备类型表中。
是否创建分区。
确定是否每天执行一次的过程。
如果没有,请创建它。

必须在 my.ini 中启用 Event_scheduler=on。
此过程将每天检查历史数据表,并在段到期日临近时添加段。
代码为月度;每三个月一次书面活动,包含半年和年度小节以及维护程序和活动。

不要忘记更改路径和表名以供参考。
如果没有指定分区计划,则会记录在日志中。
这取决于你。

SQL 日期函数如何获取月份的第一天?

那天调试报表的时候,发现该月的第一天计算不正确,数据不符。
我满头大汗。
后来发现是SQL语句写错了,使用了字符串拼接的方法。
结果老版本的Oracle直接报错。
这突然让我想起,在写SQL的时候,确实需要先了解数据库的心情。

例如,在 SQL Server 中,使用 DATEFROMPARTS 函数非常棒,并且只需一行代码即可完成。
我记得上次编写存储过程时使用过这个。
它非常高效并且不容易出错。
代码仅包含几行,因此易于维护。

Oracle的TRUNC函数也非常好用。
记得给“MM”参数加上引号,否则会导致类型错误。
一位同事因此陷入困境。
调试了半天,发现是引用问题。
有时候写SQL就是这样。
看似简单,但细节决定成败。

PostgreSQL的DATE_TRUNC更加灵活,你可以控制是否截断为天或月。
有一个项目需要按季度统计,所以我使用了“季度”参数。
原来PostgreSQL是直接支持的,其他数据库就得自己计算了。
这也解释了为什么在使用数据库之前需要阅读文档。

虽然通用的方法是通用的,但是真正要使用的时候还是要注意数据库的差异。
例如MySQL的CONCAT和|| SQLite 以不同的方式使用它们,并且每个转换函数都有自己的偏好。
我记得有一个客户使用旧版本的DB2 ,但是CAST功能崩溃了,最后他使用CONVERT解决了问题。
如今,数据库兼容性问题确实令人头疼。

等一下,还有一件事。
最近接触到云数据库,发现它们对标准SQL的支持在不断完善,而且还可以使用字符串连接||。
不过有一个客户使用的是Oracle 1 2 c,还不支持DATE_TRUNC,所以只能使用TO_DATE+'-01 '。
我们对此无能为力。

就性能优化而言,经验法则是使用本机功能。
上次我优化报告时,切换到 DATEFROMPARTS 后,执行时间减少了一半。
然而,有例外。
MySQL的STR_TO_DATE函数在某些版本中比DATE_FORMAT更快,这很有趣。

还必须考虑边境情况。
东南亚有一个项目,但是日期格式不一样。
如果直接使用CURRENT_DATE,会出现错误。
最后,我使用 STRFTIME('%Y-%m-01 ')。
这提醒我,在写SQL的时候不能想当然,你必须知道客户端在哪里使用它。

我们来总结一下。
SQL Server 的 DATEFROMPARTS、Oracle 的 TRUNC、PostgreSQL 的 DATE_TRUNC,这些函数简单易用、高效、好用。
虽然通用方法是通用的,但要注意数据库差异。
性能改进基于测试,边缘情况基于经验。
但话又说回来,有这么多数据库,我怎样才能记住它们呢?