手记

SQL从优秀到卓越:第2部分

泰勒布朗洛

5分钟阅读

当你打电话时,并不总是在那里。

这是我最有价值的SQL’黑客’的4部分系列的第2部分。查看系列中的其他:

第1部分:通用表格表达式

第2部分:关于这些日期

第3部分:另一个Join

第4部分:窗口函数

对不受欢迎的SQL黑客有一个建议,这对你带来了差异吗?让我知道!

但是,现在到主赛事:

SQL的日期和时间

无论你在写SQL多久,处理日期和时间都不是一个受欢迎的任务。他们令人惊讶的是棘手,当你最不期待的时候可以让你回来。

所以在这个版本的系列中,我将走过一些有用的日期/时间’黑客’,应该使新手和专家受益。

动作卡

在潜入代码之前,重要的是要拍摄我们所提供的高级工具。这就像玩棋盘游戏大流行(太快?),并且拥有你的角色的动作卡总是可见的,所以你想起了你每次转弯的动作。

以下是我们的SQL日期/时间操作卡,包括我们在日期/次执行的操作。在每个都是动作是一系列单独的函数和语法,但它有助于规划我们在这个高水平的分析。

例如,如果您有一些销售数据,并且您的BOSS希望看到季度总计,您将需要:

将字符串解析为日期(“20220110”)将本科日期截断到每个季度开始(2022-01-10)格式化这些日期在图表或表中看起来不错

> SQL Date/Time Action Card. Image by Author.

SQL的每个方言都有自己的函数,为每个动作,并且可悲的是它自己的语法。因此,而不是通过艰苦的细节进行每个行动,我将指导您到以下指南:

在bigquery的日期和时间Snowflake的日期和时间我的mvhs(最有价值的黑客)?

好的,现在有趣的部分 - 实际,有用的技巧是什么。这是我最亲爱的日期/时间’黑客的列表:

1.隐式转化

大多数数据库都有一个“隐式转化”的感觉,它只是在某些上下文中的意思,您可以键入日期字符串(“2022-01-01”),数据库将自动解决您要使用的日期 1月1日,2022。

这对于在日期列中过滤尤其有用。

示例:下面的查询将拉动2022年的所有伦敦天气数据。

为什么我喜欢它:如果我们没有这样的话,我必须始终将我的字符串响起为日期,或者在过滤时使用提取函数来获取我想要的日期部件。但是对于简单的日期范围,使用“yyyy-mm-dd”的字符串格式作为过滤器是我永远不会停止做的事情。

警告:与我的下一个点直接冲突,大多数数据库都要求这些日期以标准的ISO格式:“yyyy-mm-dd”,但有些让您自定义此操作。

2.全球化思考

作为欧洲的美国生活,每当我看到2022/10/06的日期时,我有一刻恐慌,如果我们在10月6日或6月10日谈论我们不确定。

而且,当我看到2022/10/06 10:00我更加困惑。当地时间为上午10点?世界标准时间?夏令时的时间?

即使您的数据和团队都位于同一时区,也思考存储和呈现的日期和时间是至关重要的。

要处理这个,我喜欢:

始终使用UTC时间戳,如果需要,为时区调整日期和时间创建新列当呈现日期时,我总是采取最后一步重新格式化日期至:月日,年份(10月6日,2022年)。(但我认为世界上大多数人可能会做出不同的方式)

示例:在对我的Netflix数据的分析中,每个程序的开始时间被给出为UTC时间戳。但要锻炼一天的时间,我需要观看最多的电视,我需要将此转换为当地时间。

为什么我喜欢它:让我高枕无忧,看看我的日期和时间代表着UTC,以及当地时间,所以我可以选择如何接近每个问题。

警告:在如何显示日期时,每个工具都具有不同的默认值。例如,在许多BI工具中,时间戳被自动调整到本地时间,因此您的定制转换可能是冗余的。如有疑问,更改计算机时区,并查看查询输出是否更改!

3.生成日期

如果在我们的数据集中发生的事情发生时,我想知道什么时候不知道他们没有?该用户什么时候不使用我们的应用程序?

这种工作需要一组统一日期,根本不会来自我们的数据。

在进行队列分析时,这特别有用。

示例:让我们说我想看看我每天看多少小时的电视(包括当我没有观看任何Netflix时)。我需要生成我想要查看的日期,然后将其连接到我的netflix数据。那天我没有观看任何电视,那个日期应该出现空值:

为什么我喜欢它:找出有时候没有发生的事情的频率就像它的那样重要。

警告:恼人地,每个SQL语法都有很不同的方式执行此操作。

有一些日期/时间SQL Hacks我错过了吗?让我在评论中知道?

进一步阅读PostgreSQL,BigQuery,Snowflake,Redshift,MySQL的日期/时间文档如果字幕看起来很熟悉,请在这里享受大约90岁的节拍。

0人推荐
随时随地看视频
慕课网APP