SQL -高阶3
zstarling
- 字符串拼接与类型转换
- 最大,最小值,提取日期部分的数值
- 日期截断
字符串拼接与类型转换
新语法SQL
delete
from public.basiclaw_qr_staff_ac ct
where batch_date = ''' || data_dt || ''' :: date
and biz_line = ''' || biz_line || ''';
详解
该 SQL 语句使用 DELETE 去删除 public.basiclaw_qr_staff_acct 表中符合特定条件的记录。具体条件为:
- batch_date 等于一个值,这个值由 data_dt 变量与两个空白单引构成,即 ‘’ || data_dt || ‘’。
- biz_line 等于另一个值,这个值由 biz_line 变量和两个空白单引号构成,即 ‘’ biz_line || ‘’。
其中,|| 用于连接两个字符串。空白单引号 ‘’ 表示一个空字符串,此处使用两个单引号是为了在 SQL 语句中表示一个空白单引号。data_dt 和 biz_line 都是在 SQL 语句执行前定义好的变量,其具体值由应用程序或用户提供。
::date 是 PostgreSQL 中的类型转换语法,表示将 batch_date 列的数据类型转换为 date 类型。
因此,这个 SQL 语句的作用是删除 public.basiclaw_qr_staff_acct 表中符合特定条件的记录,这些条件基于 batch_date 和 biz_line 列的取值。其中,data_dt 和 biz_line 是在执行 DELETE要根据具体情况赋值的变量。
详细解释上述语句中的’‘’ || data_dt || ‘’’ :: date中涉及的用法 ,并3个举例说明此用法
这个 SQL 语句中的 ‘’‘ || data_dt || ’‘’ :: date 部分涉及到字符串拼接类型转换两个用法。具体来说,这个表达式将 data_dt 变量连接在两个空白单引号(红色标记)(两个空白单元格做转义解释也可以是一个单引号 ' )中,并将拼接后的字符串转换 date 类型。下面对这两个用法做进一步解释并给出举例:
-
字符串拼接(String Concatenation)
在 SQL 中,常见的字符串拼接运算符有 || 和 +。在上述语句中使用的是 || 运算符来将单引号与_dt 变量拼接起来形成一个新的字符串。例如,假设 data_dt ‘2022-01-01’,那么 ‘’’ || data_dt || ‘’’ 的结果就是 ‘2022-01-01’。这个技巧通常用来将某些字符串或变量值嵌入 SQL 语句中,构建出特定的查询条件。 -
类型转换(Type Casting)
SQL 中的类型转换运算用来将一个数据类型的值转换为另一个数据类型,目的是使数据类型一致以便进行特定的计算或查询。在 SQL 中,类型转换通常使用 :: 运算符来完成。在上述语句中使用的是 ::date 语法,将拼接好的字符串转换为 date 类型。例如,‘’‘2022-01-01’‘’::date 的结果就是 2022-01-01(date 类型)。
示例
- 在查询中使用字符串拼接功能,构建出特定的查询条件。例如,在查询某个客户下某个产品销售情况时,使用 || 运算符连接客户编号和产品编号来查询特定客户、特定产品的销售记录:
SELECT * FROM sales WHERE customer_id || product_id = 'ACME01-1234';
- 在金额计算中进行类型转,确保不同数据类型的值能够参与计算并得到正确的结果。例如,计算总销售金额时,可能需要将销售数量和单价转换为相同的数据类型(比如IMAL)以便进行准确的计算:
SELECT qty * price::DECIMAL AS total_sales FROM sales;
- 在存储过程或函数中,使用字符串拼接和类型转换以便构建出特定的查询或更新语句。例如,在一个函数中,构建查询销售员的销售记录时使用字符串拼接和类型转换构建出特定的 SQL 查询语:
sales_query := 'SELECT * FROM sales WHERE salesperson_id = ''' || sp_id || ''' AND sales_date >= ''' || start_date || '''::date AND sales_date < ''' || end_date || '''::date';
EXECUTE sales_query INTO sales_data;
问题
- 为什么连接内容中左右存在空格,是书写规范吗,会影响输出结果吗?
- ‘’ 是新增单引号方便形成SQL所需的查询格式’xx’吗?
最大,最小值,提取日期部分的数值
新语法SQL
sum(date_part(''day''),least(t.leave_date, t.batch_date) -greatest(t.arrive_date,date_trunc( ''month'',t.batch_date))+1) over(partition by t.staff_no) as duty_days,--在岗天数
在上述SQL中,有几个用到的语法,其中最主要的是sum()
和date_part()
函数、least()
和greatest()
函数、over()
和partition by
关键字,下面对这些语法做详细解释并给出三个示例:
sum()
和date_part()
函数
sum()
函数是一个聚合函数,用于计算指定列的总和。date_part()
是一个日期函数,用于提取日期部分的数值,可以有效地处理日期数据。在本SQL语句中,sum(date_part('day', expression))
用于计算参数表达式中日期部分的总和。例如,sum(date_part('day', '2022-01-31' - '2022-01-01'))
将返回30,表示两个日期之间的天数。least()
和greatest()
函数
least和
greatest()是用于比较多个数值或日期的函数。
least()函数返回其中最小的值,
greatest()函数返回其中最大的值。在本SQL语句中,这两个函数用于计算输入的两个起始日期中较早的日期和两个结束日期中较晚的日期。例如,
least(‘2022-01-01’, ‘2022-01-31’)将返回'2022-01-01',而
greatest(‘2022-01-01’, ‘2022-01-31’)`将返回’2022-01-31’。over()
和partition by
关键字
over()
是一个窗口函数,用于在查询的结果中计算聚合、排序、组等操作。partition by
是用于指定窗口函数分组的关键字。在这个SQL语句中,它们用于计算每个员工的在岗天数,分别按照员工编号分组计算。例如,sum(...) over (partition by t.staff_no)
将对工号相同的每个员工计算在岗天数的总和。如果想了解更详细的窗口函数的使用方法,可以阅读该篇文章SQL-窗口函数详解
示例
- 使用
date_part()
计算一组日期中的小时数总和:
SELECT sum(date_part('hour', my_time)) as total_hours FROM my_table;
- 使用
least()
和greatest()
函数计算一组日期的时间跨度,并返回起始日期和结束日期之间的数据:
SELECT * FROM_table WHERE my_date BETWEEN greatest(start_date, end_date) AND least(start_date, end_date);
- 使用
over()
和partition by
计算每个销售员的销售总额和百比,分别按照销售员和产品类别分组计算:
salesperson, product_category, sum(sales) OVER (PARTITION BY salesperson) AS total_sales,sum(s) OVER (PARTITION BY salesperson, product_category) / sum(sales) OVER (PARTITION BY salesperson) AS pct_sales
FROM my_sales_table;
日期截断
date_trunc(''month'',t.entry_date)
详解
该句SQL 将entry_date
字段的值截断为月份,并返回截断后的结果。
在SQL中,date_trunc
函数用于截断日期或时间值,并返回截断后的结果。它接受两个参数:第一个参数是截断的单位(例如:year
、month
、day
、hour
等),第二个参数是要截断的日期或时间值。
示例
CREATE TABLE orders (order_id SERIAL PRIMARY KEY,order_date DATE
);INSERT INTO orders (order_date) VALUES('2023-06-10'),('2023-06-11'),('2023-07-15'),('2023-07-20'),('2023-08-05');
- 截断到年份:返回值为该年份的第一天,输出格式依旧为年月日的日期格式,而非年份的数值格式。
SELECT date_trunc('year', order_date) FROM orders;date_trunc------------2023-01-012023-01-012023-01-012023-01-012023-01-01
- 截断到月份:返回值为该月份的第一天,输出格式依旧为年月日的日期格式,而非月份的数值格式。
SELECT date_trunc('month', order_date) FROM orders;date_trunc------------2023-06-012023-06-012023-07-012023-07-012023-08-01
- 截断到日期:返回值为该天的值。若order_date为年月日时间格式,则输出值为年月日时分秒,此时的时分秒取0时0分0秒,如date_trunc2所示。
SELECT date_trunc('day', order_date) FROM orders;date_trunc1------------2023-06-102023-06-112023-07-152023-07-202023-08-05date_trunc2---------------------2023-06-10 00:00:002023-06-11 00:00:002023-07-15 00:00:002023-07-20 00:00:002023-08-05 00:00:00
- 截断到小时:若order_date为年月日时间格式,则输出值为年月日时分秒,此时的分秒取0分0秒。
SELECT date_trunc('hour', order_date) FROM orders;date_trunc---------------------2023-06-10 10:00:002023-06-11 15:00:002023-07-15 09:00:002023-07-20 16:00:002023-08-05 12:00:00
相关文章:
SQL -高阶3
zstarling 字符串拼接与类型转换最大,最小值,提取日期部分的数值日期截断 字符串拼接与类型转换 新语法SQL delete from public.basiclaw_qr_staff_ac ct where batch_date || data_dt || :: date and biz_line || biz_line || ;详解 该 SQL 语句…...

HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例
HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例 声明式 UI ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。 如果组件的接口定义没有包…...
播放器开发(六):音频帧处理并用SDL播放
目录 学习课题:逐步构建开发播放器【QT5 FFmpeg6 SDL2】 步骤 AudioOutPut模块 1、初始化【分配缓存、读取信息】 2、开始线程工作【从队列读帧->重采样->SDL回调->写入音频播放数据->SDL进行播放】 主要代码 分配缓存 // 对于样本队列 av_audio_…...
Qt 问题记录
问题记录 运行时出现的问题 运行出现的warning QWidget::repaint: Recursive repaint detected在paintEvent中使用painter绘制了线段、图片,移动了QWidget,加入了下面代码导致的 QApplication::processEvents();屏蔽后没有出现该warning QApplicati…...
Go 语言真正有什么用处?
在其十几年的发展过程中,Google 的Go 编程语言已经从 alpha 极客的好奇心发展成为世界上一些最重要的云原生软件项目背后经过考验的编程语言。 为什么Docker、Kubernetes等项目的开发者会选择 Go ?Go 的定义特征是什么?它与其他编程语言有何…...

贪心 55. 跳跃游戏 45.跳跃游戏 II
55. 跳跃游戏 题目: 给定非负数组,初始位置在数组第一格,数组值是可以选择的最大跳跃步数,判断能不能达到数组末尾。 示例 1: * 输入: [2,3,1,1,4] * 输出: true * 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1,…...

为XiunoBBS4.0开启redis缓存且支持密码验证
修改模块文件1 xiunoPHP/cache_redis.class.php: <?phpclass cache_redis {public $conf array();public $link NULL;public $cachepre ;public $errno 0;public $errstr ;public function __construct($conf array()) {if(!extension_loaded(Redis)) {return $thi…...
手把手教你写一个Shell脚本部署你的服务
我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署,…...
银行数字化产品方案
在互联网及金融科技公司快速发展的时代背景下,银行客户普遍都意识到了自己在客户体验、客户洞察、产品服务方面受到的来自互联网的挑战 。为了更好地面对各方面的挑战,传统的业务模式必须革新。传统银行都在积极进行数字化转型。同时,也要面对…...

C# datagridview控件 绑定数据库中表中数据的方式-3
1.如下图所示,为数据库中的一张表结构,注意该表中共有11个字段 2.首先在窗体后台代码中拖入一个datagridview控件,并在窗体加载时,给datagridview控件添加列,添加的方式如下所示:请注意,每个列…...
Amazon CodeWhisperer 正式发布可免费供个人使用
文章作者:sunny 亚马逊云科技日前推出了实时 AI 编程助手 Amazon CodeWhisperer,包括个人套餐和专业套餐,所有开发人员均可免费使用个人套餐。Amazon CodeWhisperer 让开发人员能够保持专注、高效,帮助他们快速、安全地编写代码&a…...
el-table根据返回数据回显选择复选框
接口给你返回一个集合,然后如果这个集合里面的status2,就把这一行的复选框给选中 注意: 绑定的ref :row-key"getRowKeys" this.$refs.multiTableInst.toggleRowSelection(this.list[i], true); <el-table :data"list"…...

代码随想录算法训练营第四十二天 _ 动态规划_01背包问题。
学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 二维数组处理01背包问题 听起来…...

会话 cookie 及隐私的那些事
什么是会话 Cookie? 会话 Cookie 的概念非常简单。 会话 Cookie,也称为临时 Cookie 或内存 Cookie,是网站在浏览会话期间存储在用户计算机或设备上的小数据片段。 它是由网站生成并由您的浏览器存储和使用的多种 Cookie 之一。 常规 Cookie 或“持久”Cookie 是通常在您的…...
前端知识笔记(二十九)———MySQL通配符和正则表达式
一、通配符 1.% 匹配0,1,多个字符,但不匹配NULL 2._ 匹配单个字符 3.[charlist] 匹配字符列中的任何单一字符 4.[^charlist] 或 [!charlist] 匹配不在字符列中的任何单一字符 二、正则表达式 通配符的LIKE替换为REGEXP LIKE 匹配整个列&…...
C#网络编程(System.Net.Sockets命名空间)
目录 一、Socket类 1.示例源码 2.生成效果 二、TcpClient类和TcpListener类 1.示例源码 2.生成效果 三、UdpClient类 1.示例源码 2.生成效果 System.Net.Sockets命名空间主要提供制作Sockets网络应用程序的相关类,其中Socket类、TcpClient类、TcpListener类…...
linux 系统重装 ssh 连接失败
一.错误描述 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 二.解决方案 输入以下指令: ssh-keygen -R XXX(ip地址) 按照我的例子(ip:10.165.7.136),会返回以下信息: 重新尝试连…...
stream流操作List对象,指定属性,取差集、交集
差集 // 差集 (list1 - list2 list1 中不同数据)List<Person> reduce1 list1.stream().filter(a -> !list2.stream().map(b -> b.getAge() "&" b.getName()).collect(Collectors.toList()).contains(a.getAge() "&" a.getName()…...
计算机相关行业在大数据库时代下的潮流和趁势
还记得当初自己为什么选择计算机? 随着数据的爆炸性增长,数据科学和数据分析成为了热门的领域。这些专业涉及处理和分析大规模数据集的技术和方法,以从中提取有价值的信息和洞察。数据科学家和数据分析师在各个行业中的需求不断增加…...

Mac苹果视频剪辑:Final Cut Pro Mac
Final Cut Pro是一款由Apple公司开发的专业视频非线性编辑软件,是业界著名的视频剪辑软件之一。它最初发布于1999年,是Mac电脑上的一款独占软件。Final Cut Pro具有先进的剪辑工具、丰富的特效和颜色分级、音频处理等功能,使得用户可以轻松地…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...