MySQL:在MySQL中实现toStartOfQuarter和toStartOfWeek等函数

文章目录

    • 在 MySQL 中实现 ClickHouse 日期函数:toStartOfYear/toStartOfQuarter/toStartOfMonth/toMonday/toStartOfWeek
      • toStartOfYear
      • toStartOfQuarter
      • toStartOfMonth
      • toStartOfWeek/toMonday

在 MySQL 中实现 ClickHouse 日期函数:toStartOfYear/toStartOfQuarter/toStartOfMonth/toMonday/toStartOfWeek

探索在 MySQL 中实现 ClickHouse 的以下函数。

ClickHouse 日期函数描述实现难度
toStartOfYear将 Date 或 DateTime 向前取整到本年的第一天。 返回 Date 类型。⭐️
toStartOfQuarter将 Date 或 DateTime 向前取整到本季度的第一天。 返回 Date 类型。⭐️⭐️⭐️
toStartOfMonth将 Date 或 DateTime 向前取整到本月的第一天。 返回 Date 类型。⭐️
toMonday将 Date 或 DateTime 向前取整到本周的星期一。 返回 Date 类型。⭐️⭐️
toStartOfWeek(t[,mode])按 mode 将 Date 或 DateTime 向前取整到最近的星期日或星期一。 返回 Date 类型。 mode 参数的工作方式与 toWeek() 的 mode 参数完全相同。 对于单参数语法,mode 使用默认值 0。⭐️⭐️

toStartOfYear

SELECT DATE_FORMAT(date, '%Y-01-01')

toStartOfQuarter

SELECT DATE_ADD(DATE_FORMAT(date,'%Y-01-01'),INTERVAL CEIL((DATE_FORMAT(date,'%m')/3))-1 QUARTER)

思路分析:

向前取本季度的第一天,可以通过本年第一天加季度数得到,季度数可以通过月份/3得到。

步骤倒推:

  1. DATE_ADD(DATE_FORMAT(date,'%Y-01-01'),INTERVAL 【季度】 QUARTER)
    

    基准点取本年第一天,通过加 [0,3] 个季度得到以下效果:YYYY-01-01/YYYY-04-01/YYYY-07-01/YYYY-10-01,分别表示一季度、二季度、三季度、四季度。

    也就是说接下来的 SQL 我们要考虑如何通过 Date 转换出 [0,3]。

  2. CEIL((DATE_FORMAT(date,'%m')/3))-1
    

    这里我们通过月份转换出季度,转换规则为 [1,3]/[4,6]/[7,9]/[10,12] 转为 0/1/2/3。

toStartOfMonth

SELECT DATE_FORMAT(date, '%Y-%m-01')

toStartOfWeek/toMonday

SELECT DATE_ADD(DATE_FORMAT(date,'%Y-01-01'),INTERVAL DATE_FORMAT(date, '%u') WEEK)    -- 每周第一天是周日
SELECT DATE_ADD(DATE_FORMAT(date,'%Y-01-01'),INTERVAL DATE_FORMAT(date, '%u')*7-6 DAY) -- 每周第一天是周一

思路分析:

向前取本周第一天,可以通过本年第一天加周数得到,也可以通过本年第一天加天数得到。后者在改变每周第一天是周几方面比较灵活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue的乌鲁木齐南山冰雪旅游服务网站【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推…

MVCC 是否彻底解决了事物的隔离性 ?

目录 1. 什么是 MVCC 2. MVCC 是否彻底解决了事物的隔离性 3. MySQL 中如何实现共享锁和排他锁 4. MySQL 中如何实现悲观锁和乐观锁 1. 什么是 MVCC MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种多版本并发控制机制&…

webpack 和 ts 简单配置及使用

如何使用webpack 与 ts结合使用 新建项目 ,执行项目初始化 npm init -y会生成 {"name": "tsdemo01","version": "1.0.0","description": "","main": "index.js","scripts&…

Spring的ApplicationEvent简单使用

ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现…

自动驾驶数据集汇总

1.Nuscenes 数据集链接:nuScenes nuscenes数据集下有多个任务,涉及Detection(2D/3D)、Tracking、prediction、激光雷达分割、全景任务、规划控制等多个任务; nuScenes数据集是一个具有三维目标注释的大型自动驾驶数…

【ARM 嵌入式 编译系列 10.3 -- GNU elfutils 工具小结】

文章目录 什么是 GNU elfutils?GNU elfutils 常用工具有哪些?objcopy 常用参数有哪些?GNU binutils和GNU elfutils区别是什么?上篇文章:ARM 嵌入式 编译系列 10.2 – 符号表与可执行程序分离详细讲解 什么是 GNU elfutils? GNU elfutils是一个开源的工具集,用于处理ELF…

2023-8-15差分矩阵

题目链接&#xff1a;差分矩阵 #include <iostream>using namespace std;const int N 1010;int n, m, q; int a[N][N], b[N][N];void insert(int x1, int y1, int x2, int y2, int c) {b[x1][y1] c;b[x1][y2 1] - c;b[x2 1][y1] - c;b[x2 1][y2 1] c; }int main…

基于SOLIDWORKS配置功能建立塑料模具标准件库

在塑料模具的设计过程中&#xff0c;建立其三维模型对于后续进行CAE分析和CAM加工是非常重要的。除了型腔和型芯以外&#xff0c;塑料模具中的标准件很多&#xff0c;如推杆、导柱、导套、推板、限位钉等&#xff0c;这些对于不同的产品是需要反复调用的。目前&#xff0c;我国…

汽车OTA活动高质量发展的“常”与“新”

伴随着车主的频繁崔更&#xff0c;车企除了卷硬件、拼价格&#xff0c;逐渐将精力转移到汽车全生命周期的常用常新。时至下半年&#xff0c;车企OTA圈愈发热闹&#xff0c;以新势力、新实力为代表新一代车企&#xff0c;OTA运营活动逐渐进入高质量发展期。 所谓高质量&#xf…

记录--webpack和vite原理

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 每次用vite创建项目秒建好&#xff0c;前几天用vue-cli创建了一个项目&#xff0c;足足等了我一分钟&#xff0c;那为什么用 vite 比 webpack 要快呢&#xff0c;这篇文章带你梳理清楚它们的原理…

FFmpeg 静态库编译错误汇总

今天使用静态库编译发现 了错误 这个只有在arm64 的编译上 存在 。armeabi-v7a不存在问题 ld: error: relocation R_AARCH64_ADD_ABS_LO12_NC cannot be used against symbol ff_cos_16384; recompile with -fPIC 解决方案列举汇总 有很多 大家如果有同样的问题可以一一测试。…

c++ 虚函数

虚函数的作用就是当一个类继承另一个类时&#xff0c;两个类有同名函数&#xff0c;当你使用指针调用时你希望使用子类的函数而不是父类的函数&#xff0c;那么请使用 virutal 和 override 关键词 看代码&#xff1a; #include <iostream> #include <string> #in…

Kotlin开发笔记:集合和逆变协变

Kotlin开发笔记&#xff1a;集合和逆变协变 Kotlin中的集合 基本的集合类型 Kotlin中的集合类型和Java差不多&#xff0c;不过有些在名称上可能有出入&#xff0c;下面是Kotlin中的一些基本集合类型&#xff1a; 类型介绍Pair两个值的元组Triple三个值的元组Array经过索引的…

去掉鼠标系列之一: 语雀快捷键使用指南

其实应该是系列之二了&#xff0c;因为前面写了一个关于Interlij IDEA的快捷键了。 为什么要写这个了&#xff0c;主要是觉得一会儿用鼠标&#xff0c;一会儿键盘&#xff0c;一点儿不酷&#xff0c;我希望可以一直用键盘&#xff0c;抛开鼠标。后面陆续记录一下各个软件的快捷…

高效使用ChatGPT之ChatGPT客户端

ChatGPT客户端&#xff0c;支持Mac, Windows, and Linux 下载地址见文章结尾 软件截图 Windows: Mac&#xff1a; 说明 chatgpt桌面版&#xff0c;相比于网页版的chatgpt&#xff0c;最大的特色是支持历史聊天对话记录导出&#xff0c;且支持三种格式&#xff1a;PNG、PDF、…

由浅入深详解四种分布式锁

在多线程环境下&#xff0c;为了保证数据的线程安全&#xff0c;锁保证同一时刻&#xff0c;只有一个可以访问和更新共享数据。在单机系统我们可以使用synchronized锁或者Lock锁保证线程安全。synchronized锁是Java提供的一种内置锁&#xff0c;在单个JVM进程中提供线程之间的锁…

小程序的数据绑定和事件绑定

小程序的数据绑定 1.需要渲染的数据放在index.js中的data里 Page({data: {info:HELLO WORLD,imgSrc:/images/1.jpg,randomNum:Math.random()*10,randomNum1:Math.random().toFixed(2)}, }) 2.在WXML中通过{{}}获取数据 <view>{{info}}</view><image src"{{…

C++ std::thread

若要使用线程类std::thread&#xff0c;则需包含<thread>头文件。 创建线程 std::thread表示一个线程。线程对象是不可复制或赋值的&#xff0c;但可以移动(move)&#xff0c;如移动构造或移动赋值。 当构造std::thread对象时&#xff0c;需给构造函数输入一个参数&am…

RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景

作者&#xff1a;隆基 本文将从技术角度了解 RocketMQ 的云原生架构&#xff0c;了解 RocketMQ 如何基于一套统一的架构支撑多元化的场景。 文章主要包含三部分内容。首先介绍 RocketMQ 5.0 的核心概念和架构概览&#xff1b;然后从集群角度出发&#xff0c;从宏观视角学习 R…

swift 项目集成友盟推送

1, 需要用桥接文件 , 不然引用不到依赖库 2, 可以用测试模式测试, 可以debug 3, 测试模式获取deviceToken, 添加测试设备 deviceToken获取方法 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { le…