文章 查看内容

SQL日期中的大小写实践案例

SQL日期中的大小写实践案例

234 0 函数专题 2024-7-18 15:30 发布者: 观小凡

时间宏和SQL函数里表示年和月的时候,年需要区分大写Y与小写y,月需要区分大写M与小写m。

问题:今天是2020年12月28日,用时间宏取年月:{{{yesterday %YMMdd}}},返回的是20211228

image.png

产生原因:在时间宏里,小写 y 是Year(自然年), 大写Y 表示的是Week year(年周年);Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。

【举例】:2020-12-28 本周刚好跨年,且Week year是从上周日开始算的,那么昨天(2020年12月27日,周日)就刚好是跨年周的第一天,是属于2021年的第一周的,所以就出现了上面的情况。

解决方法:不需要展示周的场景里,年份要用小写的 y 。

image.png

问题:date_format([日期],"YYYY-MM"),为什么2019-12-31会被识别为“2020-12”?

产生原因:Spark SQL里,小写 y 是Year(自然年), 大写 Y 表示的是ISO Week year(ISO年周年),一周从周一开始,周日结束,如果包含1月1日的一周在新一年中天数超过3天,则为新一年第1周;否则,它是上一年的最后一周。所以2019年最后一天,实际被算作了2020年的第一周。

解决方法:函数正确写法为 date_format([日期],"yyyy-MM")。同理,Spark里其他日期函数,例如 to_date()也要遵循同样用法。

注意

       大小写Y的问题,有两个地方会遇,一个是新建字段的函数,一个是时间宏,但是SparkSQL和时间宏里的Week year(年周年)划分标准并不完全相同,返回的周数也会不一致。不同直连数据库用法也可能存在不同,使用时要注意一下。更多Spark日期函数用法请参考 Spark日期和时间函数

问题:使用to_date()函数转化日期时,发现对数对不上。函数写法:to_date([日期]),"yyyymmdd")

产生原因:SparkSQL 大写MM代表的是月份(month),小写mm代表的是分钟(minute)。

解决方法:转换日期时,正确写法是大写的MM,应该写成:to_date([日期]),"yyyyMMdd")

image.png


路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2025 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部