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 表中符合特定条件的记录。具体条件为:

  1. batch_date 等于一个值,这个值由 data_dt 变量与两个空白单引构成,即 ‘’ || data_dt || ‘’。
  2. 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 类型。下面对这两个用法做进一步解释并给出举例:

  1. 字符串拼接(String Concatenation)
    在 SQL 中,常见的字符串拼接运算符有 || 和 +。在上述语句中使用的是 || 运算符来将单引号与_dt 变量拼接起来形成一个新的字符串。例如,假设 data_dt ‘2022-01-01’,那么 ‘’’ || data_dt || ‘’’ 的结果就是 ‘2022-01-01’。这个技巧通常用来将某些字符串或变量值嵌入 SQL 语句中,构建出特定的查询条件。

  2. 类型转换(Type Casting)
    SQL 中的类型转换运算用来将一个数据类型的值转换为另一个数据类型,目的是使数据类型一致以便进行特定的计算或查询。在 SQL 中,类型转换通常使用 :: 运算符来完成。在上述语句中使用的是 ::date 语法,将拼接好的字符串转换为 date 类型。例如,‘’‘2022-01-01’‘’::date 的结果就是 2022-01-01(date 类型)。

示例

  1. 在查询中使用字符串拼接功能,构建出特定的查询条件。例如,在查询某个客户下某个产品销售情况时,使用 || 运算符连接客户编号和产品编号来查询特定客户、特定产品的销售记录:
SELECT * FROM sales WHERE customer_id || product_id = 'ACME01-1234';
  1. 在金额计算中进行类型转,确保不同数据类型的值能够参与计算并得到正确的结果。例如,计算总销售金额时,可能需要将销售数量和单价转换为相同的数据类型(比如IMAL)以便进行准确的计算:
SELECT qty * price::DECIMAL AS total_sales FROM sales;
  1. 在存储过程或函数中,使用字符串拼接和类型转换以便构建出特定的查询或更新语句。例如,在一个函数中,构建查询销售员的销售记录时使用字符串拼接和类型转换构建出特定的 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关键字,下面对这些语法做详细解释并给出三个示例:

  1. sum()date_part()函数
    sum()函数是一个聚合函数,用于计算指定列的总和。date_part()是一个日期函数,用于提取日期部分的数值,可以有效地处理日期数据。在本SQL语句中,sum(date_part('day', expression))用于计算参数表达式中日期部分的总和。例如,sum(date_part('day', '2022-01-31' - '2022-01-01'))将返回30,表示两个日期之间的天数。
  2. 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’。
  3. over()partition by关键字
    over()是一个窗口函数,用于在查询的结果中计算聚合、排序、组等操作。partition by是用于指定窗口函数分组的关键字。在这个SQL语句中,它们用于计算每个员工的在岗天数,分别按照员工编号分组计算。例如,sum(...) over (partition by t.staff_no)将对工号相同的每个员工计算在岗天数的总和。如果想了解更详细的窗口函数的使用方法,可以阅读该篇文章SQL-窗口函数详解

示例

  1. 使用date_part()计算一组日期中的小时数总和:
SELECT sum(date_part('hour', my_time)) as total_hours FROM my_table;
  1. 使用least()greatest()函数计算一组日期的时间跨度,并返回起始日期和结束日期之间的数据:
SELECT * FROM_table WHERE my_date BETWEEN greatest(start_date, end_date) AND least(start_date, end_date);
  1. 使用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函数用于截断日期或时间值,并返回截断后的结果。它接受两个参数:第一个参数是截断的单位(例如:yearmonthdayhour等),第二个参数是要截断的日期或时间值。

示例

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');
  1. 截断到年份:返回值为该年份的第一天,输出格式依旧为年月日的日期格式,而非年份的数值格式。
SELECT date_trunc('year', order_date) FROM orders;date_trunc------------2023-01-012023-01-012023-01-012023-01-012023-01-01
  1. 截断到月份:返回值为该月份的第一天,输出格式依旧为年月日的日期格式,而非月份的数值格式。
SELECT date_trunc('month', order_date) FROM orders;date_trunc------------2023-06-012023-06-012023-07-012023-07-012023-08-01
  1. 截断到日期:返回值为该天的值。若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
  1. 截断到小时:若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

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

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

相关文章

LeedCode刷题---子数组问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、最大子数组和 题目链接&#xff1a;最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连…

计算机视觉(CV)技术的优势和挑战-AI生成版

一、引言 计算机视觉是人工智能领域中的一个分支&#xff0c;旨在使计算机能够通过处理数字图像或视频数据&#xff0c;实现与人类视觉类似的感知和理解能力。计算机视觉技术的发展在很大程度上受到深度学习的推动&#xff0c;如今已经在很多应用领域得到了广泛的应用&#xf…

【力扣】——可获得的最大点数(滑动窗口)

几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…

[山东大学操作系统课程设计]实验三

0.写在前面(重点) 由于一些突发事件&#xff0c;导致目前大家手里或多或少都有了完整版的答案了。甚至很多学长学姐们写的代码远比我写的要好很多。 但是这个系列我觉得还是稍微坚持下去一点&#xff0c;或许某些地方可以帮到未来的同学们。 还是那句话&#xff0c;有需要可…

Mybatis使用注解实现复杂动态SQL

系列文章目录 1、mybatis简介及数据库连接池 2、mybatis简单使用 3、mybatis中selectOne的使用 4、mybatis中resultMap结果集的使用 5、mybatis实用教程之XML实现动态sql Mybatis使用注解实现复杂动态SQL 系列文章目录前言一、基础注解二、使用Provider 类实现复杂注解 前言 …

Spring MVC数据绑定的几种方法(一)

这篇文章包含spring mvc的默认数据类型绑定和简单数据类型绑定。内容来自实验。 准备&#xff1a; &#xff08;1&#xff09;在IDEA环境中从archetye创建webapp类型的maven项目exp6。 &#xff08;2&#xff09;在src\main目录下创建并标注java源代码文件夹和resources资源文…

NVIDIA GPU Operator install in kubernetes

文章目录 1. 简介2. Kubernetes 安装3. OS配置4. Docker Engine&#xff0c;cri-dockerd安装5. 安装 kubeadm6. GPU-Operator安装 1. 简介 Kubernetes通过设备插件框架提供对特殊硬件资源的访问&#xff0c;如NVIDIA GPU、⽹卡、Infiniband适配器和其他设备。但是&#xff0c;…

基于Java SSM框架实现实现四六级英语报名系统项目【项目源码+论文说明】

基于java的SSM框架实现四六级英语报名系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个高校四六级报名管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作…

2024美赛数学建模资料---100%获奖资料

很好的教程了 一共二十四章 每一章都是一个模型 并且有matlab编程编码 第一章 线性规划 第二章 整数规划 第三章 非线性规划 第四章 动态规划 第五章 图与网络 第六章 排队论 第七章 对策论 第八章 层次分析法 第九章 插值与拟合 第十章 数据的统计描述和分析 第十一章…

链表算法总结

知识概览 链表包括单链表和双链表&#xff0c;这里讨论算法题中的链表。为了考虑算法题中对于时间效率的要求&#xff0c;链表通常是用数组模拟成静态链表的形式&#xff0c;速度快。 单链表可以用来写邻接表&#xff08;包括n个链表&#xff09;&#xff0c;邻接表可以存储树…

详解Spring对Mybatis等持久化框架的整合

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

自带灯效的气传导耳机,声音当然好听,哈氪聆光体验

现在市场上的蓝牙耳机种类繁多&#xff0c;入耳式的算是主流&#xff0c;但不太适合户外使用 &#xff0c;我平时出门健身、散步的时候&#xff0c;更喜欢用气传导耳机。气传导耳机通常采用挂耳式的设计&#xff0c;耳机不入耳&#xff0c;佩戴舒适度更好&#xff0c;而且稳定性…

Linux安装mongodb数据库(详细)

一、下载安装包 本文使用 tgz 方式,根据服务器类型在官网下载 MongoDB 安装包。官方地址&#xff1a;https://www.mongodb.com/try/download/community 下载方式如图所示&#xff1a; 选择版本 关于 MongoDB 的版本选择&#xff0c;参见如下版本差异&#xff1a; 1、将从官…

Java基本数据类型详解

✨个人主页&#xff1a;全栈程序猿的CSDN博客 &#x1f4a8;系列专栏&#xff1a;Java从入门到精通 ✌座右铭&#xff1a;编码如诗&#xff0c;Bug似流星&#xff0c;持续追求优雅的代码&#xff0c;解决问题如同星辰般自如 Java是一种强类型语言&#xff0c;数据类型在程序中起…

最小生成树(简单讲解,通俗易懂)

什么是树呢&#xff1f; 有三个特点&#xff1a; 无向图&#xff0c;连通&#xff0c;无环 其他性质&#xff1a;树中点的个数总是比边的个数多1&#xff0c;根节点没有父节点&#xff0c;树中节点的度数之和等于其边数。 树&#xff08;tree&#xff09;是一种特殊的图&am…

JS不同运算符下的隐式类型转换

目录 运算符 逻辑运算符&#xff08;&&、||、!&#xff09;和 条件表达式&#xff08;if、三元表达式&#xff09; 逻辑运算符 条件表达式 算数运算符&#xff08;*、/、- %、&#xff09;和 关系运算符&#xff08;>、<、、!&#xff09; 算数运算符 关系…

Python实战:批量加密Excel文件指南

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python实战&#xff1a;批量加密Excel文件指南&#xff0c;全文3800字&#xff0c;阅读大约10分钟。 在日常工作中&#xff0c;保护敏感数据是至关重要的。本文将引导你通过…

栈和队列的OJ题--13.用队列实现栈

13. 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; /*解题思路&#xff1a; 此题可以用两个队列去实现一个栈&#xff0c;每次始终保持一个队列为空&#xff0c; 入栈操作相当于给非空队列进行入队操作 出栈操作相当于非空队列的队尾元素出队&…

细说CountDownLatch

CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器&#xff0c;和一个阻塞队列&#xff0c; 当计数器的值递减为0之前&#xff0c;阻塞队列里面的线程处于挂起状态&#xff0c;当计数器递减到0时…

【学习笔记】机器学习——GAN

提出于2014年。 GAN由两个神经网络组成&#xff1a;一个试图生成看起来与训练数据相似数据的生成器&#xff0c;以及一个试图从虚假数据中分辨出真实数据的判别器。生成器和判别器在训练期间相互竞争。 对抗训练&#xff08;训练竞争性网络&#xff09;是一种重要的机器学习思想…