SQL中的函数
目录
前言
一、系统内置函数
1、数学函数
2、日期和时间函数
3、聚合函数
4、字符串函数
二、自定义函数
1、标量函数的创建与调用
2、内嵌表值函数的创建与调用
3、多语句表值函数的创建与调用
前言
函数是由一个或多个 T-SQL 语句组成的子程序,可用于封装代码以便重复使用。
一、系统内置函数
T-SQL提供的内置函数,按照返回值是否具有确定性可分为确定性函数和非确定性函数两大类。
- 确定性函数:每次使用特定的输入值调用该函数时,返回的结果都相同。
 - 非确定性函数:每次使用特定的输入值调用时,返回的结果都不同。
 
函数 DATEADD为确定性函数,因为对于任何给定参数,返回的结果总是相同。函数 GETDATE为非确定性函数,因为每次执行这个函数,返回的结果都不同。
1、数学函数
| 函数名称 | 函数功能 | 函数名称 | 函数功能 | 
| ABS | 求绝对值 | POWER | 求 x的 y 次方 | 
| COS | 余弦函数 | RAND | 求随机数 | 
| COT | 余切函数 | ROUND | 四舍五入 | 
| EXP | 计算 e的 x次幂 | SIN | 正弦函数 | 
| FLOOR | 求仅次于最小值的值 | SQUARE | 开方 | 
| LOG | 求自然对数 | SQRT | 求平方根 | 
| PI | 常量,圆周率 | TAN | 正切函数 | 
2、日期和时间函数
- GETDATE():返回系统当前的日期和时间。
 - DATEADD(datepart, integer_expression, date_expression):返回指定日期 date_expression(日期表达式)加上指定的额外日期间隔 integer_expression(整形表达式)产生的新日期。
 - DATEDIFF(datepart, date_expression1, date_expression2):返回两个指定日期在 datepart 方面的不同之处,即 date_expression2 超过 date_expression1 的差值,结果值是一个带有正负号的整数值。
 - DATENAME(datepart, date_expression):以字符串的形式返回日期的指定部分,此部分由 datepart 来指定。
 - DATEPART(datepart, date_expression):以整数值的形式返回日期表达式的指定部分。此部分由 datepart 来指定。
 - day(date_expression):返回日期表达式中的日。
 - month(date_expression):返回日期表达式中的月。
 - year(date_expression):返回日期表达式中的年。
 
DATEPART() 函数 和 DATENAME 函数极其相似,只不过前者返回的是时间的名称,后者返回的是具体的时间数值。
3、聚合函数
| 函数名 | 描述 | 
| sum(列名) | 返回一个数字列的总和。 | 
| avg(列名) | 对一个数据列计算平均值。 | 
| min(列名) | 返回一个数字、字符串或日期列的最小值。 | 
| max(列名) | 返回一个数字、字符串或日期列的最大值。 | 
| count(列名) | 返回一个列的数据项数,条数。 | 
| count(*) | 返回找到的函数 | 
4、字符串函数
- ASCII(char_expression):返回表达式最左边一个字符的 ASCII码。
 - CHAR(integer_expression):返回整数所代表的 ASCII码值所对应的字符。
 - LOWER(char_expression):将大写字符转为小写字符。
 - UPPER(char_expression):将小写字符转为大写字符。
 - LTRIM(char_expression):删除字符串开始部分的空格。
 - RTRIM(char_expression):删除字符串结尾部分的空格。
 - RIGHT(char_expression, integer_expression):返回 char_expression 字符串中 integer_expression 个字符以后的部分字符串,integer_expression为负数时,返回 NULL。
 - SPACE(integer_expression):返回由 integer_expression 个空格组成的字符串,integer_expression为负数时,返回 NULL。
 - STR(float_expression [ , length [ , decimal ] ]):将一个数值类型数据转为字符串,length 为字符串长度,decimal 为小数点的位数。
 - STUFF(char_expression1, start, length, char_expression2):从 char_expression1 字符串的 start个字符位置删除 length个字符,然后把 char_expression2 字符串插入到 char_expression1 的 start 处。
 - SUBSTRING(expression, start, length):从 expression 的第 start 个字符处返回 length 个字符。
 - REVERSE(char_expression):返回 char_expression 的逆序。
 - CHARINDEX( ' pattern ', char_expression ):返回指定 pattern字符串在表达式中的起始位置。
 
二、自定义函数
在 SQL SERVER 中,根据函数返回值类型,将不同自定义函数分为 标量函数、内嵌表值函数 和多语句表值函数。
- 标量函数:返回一个确定类型的变量值,其返回值类型除了 TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP 和 TABLE 类型外的其它数据类型。函数体语句定义在 BEGIN ··· END 语句内。
 - 内嵌表值函数:返回值为一个表。内嵌表值函数没有由 BEGIN ··· END 语句括起来的函数体。返回的表由一个位于 RETURN 子句中的 SELECT 命令段从数据库中筛选出来。内嵌表值函数功能相当于一个参数化的试图。
 - 多语句表值函数:可以看作是 内嵌表值函数和内嵌表值函数的结合体。它返回的是一个表,但它和标量函数一样有一个用 BEGIN ··· END 括起来的函数体,返回值的表中的数据是由函数体中的语句插入的。因此,它可以进行多次查询,对数据进行多次筛选与合并,弥补了内嵌表值函数的不足。
 
1、标量函数的创建与调用
-- 创建标量函数的语法格式
CREATE FUNCTIOIN [ owner_name. ] function_name /* 函数名部分 */
( [ { @parameter_name [ AS ] parameter_data_type
[ = DEFAULT ] } [ , ... n ] ] ) /* 形参定义部分 */
RETURNS return_data_type /* 返回参数的类型 */
[ AS ]
BEGIN
function_body /* 函数体部分 */
RETURN expression /* 返回语句 */
END
-- owner_name:指定自定义函数的所有者。
-- function_name:指定自定义函数的名称。
-- @parameter_name:定义一个或多个参数,一个函数最多可以定义1024个参数,参数的作用范围是整个函数。
-- parameter_data_type 和 return_data_type 指定参数的数据类型和 返回值类外的其它数据类型。
-- function_body:是函数体部分,决定了函数的返回值。
-- expression:指定自定义函数返回的标量值表达式。
-- 当函数参数由默认值时,调用该函数时必须指定默认 DEFAULT 关键字才能获取默认值。
-- 示例:求 sc表中某门课程的平均成绩。
create function average (@cn char(20)) returns float
as
begin
declare @aver float
select @aver = (select avg(score) from sc where sno = @cn)
return @aver
end
-- 调用标量函数的语法格式
owner_name.function_name (parameter_expression 1 ··· parameter_expression n)
-- 含义为: 所有者. 函数名(实参1, 实参2, ... , 实参n)。
当调用自定义的标量函数时,必须提供至少由两部分组成的名称(所有者. 函数名)。可以在 SELECT 语句中调用,实参可为已赋值的局部变量或表达式;也可以使用 EXECUTE 语句调用,方法与调用存储过程相同。
-- 示例:求 C001号课的平均成绩。
declare @course char(6)
set @course = 'C001'
select dbo.average(@course) as 'C001号课的平均成绩'
2、内嵌表值函数的创建与调用
-- 创建内嵌表值函数的语法格式
CREATE FUNCTIOIN [ owner_name. ] function_name /* 函数名部分 */
( [ { @parameter_name [ AS ] parameter_data_type
[ = DEFAULT ] } [ , ... n ] ] ) /* 形参定义部分 */
RETURNS table /* 返回参数的类型 */
[ AS ]
RETURN [ ( SELECT statement ) ] /* 通过 SELECT 语句返回内嵌表 */
-- table:指定返回值为一个表。
-- SELECT statement:指单个 SELECT语句,确定返回的表的数据。
-- 示例:查看某个专业所有学生的学号、姓名、所选课程的课程号和成绩。
create function st_func(@major nvarchar(20)) returns table
as return
(select student.sno, student.sname, sc.cno, sc.score from student, sc
where specialty = @major and student.sno = sc.sno)
因为内嵌套表值函数的返回值为 table 类型,所以在调用这类函数时,只能通过 SELECT语句。
-- 示例:查看计算机专业所有学生的学号、姓名、所选的课程号和成绩。
select * from st_func('计算机')
3、多语句表值函数的创建与调用
内嵌表值函数 和多语句表值函数的返回值都是表,其不同之处在于,内嵌表值函数没有函数体,返回的表是单个 SELECT语句的结果集;而多语句表值函数在 BEGIN ··· END 块中定义的函数主体包含 T-SQL 语句,这些语句可生成行,并将行插入至表中,最后返回表。
-- 多语句表值函数的创建语法格式
CREATE FUNCTIOIN [ owner_name. ] function_name /* 函数名部分 */
( [ { @parameter_name [ AS ] parameter_data_type
[ = DEFAULT ] } [ , ... n ] ] ) /* 定义函数参数部分 */
RETURNS @return_variable table <table_definition> /* 定义作为返回值的表 */
[ AS ]
BEGIN
function_body /* 函数体部分 */
RETURN
END
-- @return_variable:是一个 TABLE 类型的变量,用于存储和累积返回的表中的数据行。其余参数与标量函数相同。
-- 示例:创建多语句表值函数,通过学号作为实参调用该函数,可显示该学生的姓名,以及各门功课的成绩和学分。
create function st_score (@no char(20)) returns @score table
(
s_no char(20),
s_name nvarchar(20),
c_name nvarchar(20),
c_score tinyint,
c_credit tinyint
)
as
begin
insert into @score
select s.sno, s.sname, c.cname, sc.score, c.credit
from student s, course c, sc sc
where s.sno = sc.sno and sc.cno = c.cno and s.sno = @co
return
end
多语句表值函数的调用方法与内嵌表值函数的调用方法相同,只能通过 SELECT 语句调用。
-- 示例:查询201602001号学生的姓名以及各门功课的成绩和学分。
select * from st_score('201602001')
若有不足之处,欢迎大佬斧正。
相关文章:
SQL中的函数
目录 前言 一、系统内置函数 1、数学函数 2、日期和时间函数 3、聚合函数 4、字符串函数 二、自定义函数 1、标量函数的创建与调用 2、内嵌表值函数的创建与调用 3、多语句表值函数的创建与调用 前言 函数是由一个或多个 T-SQL 语句组成的子程序,可用于封…...
VSCode | 修改编辑器注释的颜色
1 打开VsCode的设置进入settings.json 2 添加如下代码 "editor.tokenColorCustomizations": {"comments": "#17e917"},3 保存即可生效...
媒体邀约专访与群访的区别?
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约中的专访与群访在多个方面存在显著差异,以下是对这两种采访方式的详细比较: 一、定义与形式 专访: 定义:专访是指由媒体记者对单…...
Pycharm2024最新版community社区版下载安装配置,快速上手
第一步:下载 方法1:官网链接 https://www.jetbrains.com/pycharm/download/?sectionwindows .方法2:百度网盘 链接:https://pan.baidu.com/s/1ic2N5hUQ2m1Kmyr5nK9Jxw?pwd76dt 提取码:76dt --来自百度网盘超级…...
服务器选择租用还是托管?托管和租用哪个比较划算
在构建或扩展IT基础设施时,服务器作为关键组件,其选择方式——租用或托管,直接关系到企业的运营成本、灵活性、安全性及长期发展战略。本文将从技术、经济、安全等多个维度,深入解析这两种方案的优缺点,并探讨在何种情…...
智能制造·数字化工厂建设规划方案(65P)
获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取,请见下图...
ACM中国图灵大会专题 | 图灵奖得主Manuel Blum教授与仓颉团队交流 | 华为论坛:面向全场景应用编程语言精彩回顾
ACM 中国图灵大会(ACM Turing Award Celebration Conference TURC 2024)于2024年7月5日至7日在长沙举行。本届大会由ACM主办,in cooperation with CCF,互联网之父Vinton Cerf、中国计算机学会前理事长梅宏院士和廖湘科院士担任学术…...
k8s 公共服务
修改named.conf。修改第13行和第21行 下面是 named.rfc1912 修改位置,在最后 所以用cp -p 复制文件,保留权限 nslookup 回车,server是看哪个dns 在起作用 dns服务器要配置给所有公共服务节点和 k8s 节点 就在网络文件加个DNS2就行了&…...
【数据分析详细教学】全球气温变迁:一个多世纪的数据分析
全球气温变迁:一个多世纪的数据分析 1. 数据集选择与获取 数据可以从NASA的GISTEMP数据集获取,通常提供的格式有TXT和CSV。我们假设数据是以CSV格式提供。 2. 数据预处理 使用Python的pandas库读取数据并进行预处理。 import pandas as pd# 加载数…...
AV1技术学习:Reference Frame System
一、Reference Frames AV1 Codec 允许在其解码的帧缓冲区中最多允许保存 8 帧。对于一个编码帧,可以从解码的帧缓冲区中选择任意 7 个帧作为它的参考帧。编码端可以通过比特流显式地传输参考帧索引,范围从 1到 7。原则上,参考帧索引 1-4 为当…...
数学建模(7)——Logistic模型
一、马尔萨斯人口模型 import numpy as np import matplotlib.pyplot as plt# 初始人口 N0 100 # 人口增长率 r 0.02 # 时间段(年) t np.linspace(0, 200, 200)# 马尔萨斯人口模型 N N0 * np.exp(r * t)# 绘图 plt.plot(t, N, labelPopulation) plt.…...
“微软蓝屏”事件,给IT行业带来的宝贵经验和教训
“微软蓝屏”事件是指2024年7月19日发生的一次全球性技术故障,主要涉及微软视窗(Windows)操作系统及其相关应用和服务。 以下是对该事件的详细解析: 一、事件概述 发生时间:2024年7月19日事件影响:全球多个…...
QT总结——图标显示坑
最近写代码遇到一个神仙大坑,我都怀疑我软件是不是坏了,这里记录一下。 写qt工程的时候我们一般会设置图标,这个图标是窗体的图标同时也是任务栏的图标,但是我发现生成的exe没有图标,这个时候就想着给他加一个图标&…...
SQL 注入漏洞详解 - Union 注入
1)漏洞简介 SQL 注入简介 SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,…...
Qt创建自定义组件并且promote to之后导致编译错误(CMake)
创建自定组件并且加入到全局(勾选"Global include"选项)后,重新编译,元对象编译器生成的ui_xxxx.h文件中会新加入自定义组件的头文件: 如图所示,编译器提示找不到自定义组件的头文件: Solution: 在CMakeL…...
告别写作瓶颈,4款AI协作工具助你迸发灵感
想要一个可以理解你思路,捕捉你灵感,并且帮你将这些内容转化为高质量文本的工具吗?现下大火的ai智能写作就能做到。 1 宙.语AI 传送门:https://ailjyk.com/pc 这个工具也是一种在线的AI工具。他可以写的文章种类非常多&#…...
java30-Shiro
概述 解决认证和授权 基本使用 package com.xpc.simple;import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.realm.SimpleAccountRealm; import o…...
【linux驱动开发】卸载驱动时报错:Trying to free already-free IRQ 0
【linux驱动开发】free_irq时报错:Trying to free already-free IRQ 0 卸载驱动时报错Trying to free already-free IRQ 0 第一次加载卸载驱动没有任何问题。第二次加载驱动,按键中断触发失效,卸载驱动时报错:Trying to free already-free IRQ 0 看了…...
SpringBoot如何解决yml明文密码问题
 博客主页: 南来_北往 🔥系列专栏:Spring Boot实战 前言 在现代的软件开发中,安全性是一个重要的考量因素。对于使用SpringBoot框架开发的应用程序而言,敏感信息如数据库密码、API密钥等通常存储在YAML配置文件中…...
SDL常用结构体和函数接口
1. 结构体 SDL_Window:SDL库中用于表示应用程序窗口的结构体。它封装了一个操作系统窗口的所有属性和功能,是创建图形用户界面的基础。通过创建一个SDL_Window,开发者可以定义窗口的初始大小、位置、是否全屏、是否具有边框等属性࿰…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
