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')

若有不足之处,欢迎大佬斧正。

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

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

相关文章

浅谈监听器之聚合报告

浅谈监听器之聚合报告 “聚合报告”&#xff08;Aggregate Report&#xff09;是JMeter中最常用且功能强大的监听器之一&#xff0c;它提供了一种简洁而全面的方式来汇总和分析测试结果。本文档旨在深入解析聚合报告的特性和使用方法&#xff0c;帮助用户更好地理解和应用这一…

【Linux】条件变量及生产者消费者模型

为什么要将这两者放在一起进行呢&#xff1f; 主要是因为生产消费与条件变量关系密切&#xff0c;正好相辅相成。 目录 条件变量&#xff1a;条件变量的引出&#xff1a;条件变量的解释与接口&#xff1a;测试代码&#xff1a; 生产者消费者模型&#xff1a;概念&#xff1a;代…

opengaussdb在oepnEuler上安装

安装前提&#xff1a; 软件环境&#xff1a;openEuler 20.03LTS 个人开发者最低配置2核4G&#xff0c;推荐配置4核8G 数据库版本&#xff1a;openGauss-5.0.2-openEuler-64bit-all.tar.gz 数据库下载地址&#xff1a; https://docs-opengauss.osinfra.cn/zh/docs/5.0.0/docs/In…

OpenSNN推文:百度沈抖:深度拥抱人工智能+,加速发展新质生产力,共创智能时代新未来

在中国联通合作伙伴大会上&#xff0c;百度集团执行副总裁、百度智能云事业群总裁沈抖发表了一场题为“深度拥抱人工智能&#xff0c;加快发展新质生产力”的精彩演讲&#xff0c;深入探讨了大模型技术在当前科技浪潮中的核心地位及其对企业生产力的深远影响。 沈抖指出&#…

【LeetCode】86.分割链表

1. 题目 2. 分析 这题没有太大难度&#xff0c;主要是熟悉代码。 3. 代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def partition(self, he…

Linux系统编程-文件系统

目录 什么是Linux文件系统 文件系统的职责 存储介质抽象 inode&#xff1a;文件系统的核心 文件分配策略 目录结构 文件系统布局 日志和恢复机制 目录权限 粘滞位(t位)&#xff1a; 硬链接和符号链接 硬链接的特点&#xff1a; 创建硬链接&#xff1a; 符号链接的…

MySQL补充性文件

数据库专属单词 authentication #身份验证 delimiter #分隔符 character #字符集 collate #整理。 指定字符集的排序规则 unicode #统一码 flush #刷新 privileges #特权 string #串 set #设置 use #使用 zerofill #修饰符。0可以填补输出的值 unsigned #修饰符。无符…

德国云手机:企业移动办公解决方案

在现代商业环境中&#xff0c;移动办公已经成为一种趋势。德国云手机作为一种高效的解决方案&#xff0c;为企业提供了强大的支持。本文将探讨德国云手机如何优化企业的移动办公环境。 一、德国云手机的主要优势 高灵活性 德国云手机具有高度的灵活性&#xff0c;能够根据用户需…

Elasticsearch:Golang ECS 日志记录 - Logrus

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。 编码器以 JSON 格式记录&#xff0c;内部依赖于默认的 logrus.JSONFormatter。它还处理 ECS 错误格式的错误字段记录。 默认情况下&#xff0c;会添加以下字段&am…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(三)-架构模型和概念

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…

js-toLocaleString()方法的使用(根据本地规则将对象转换为字符串-千分位或百分比等)

1.应用场景 toLocaleString() 方法是 JavaScript 中的一个内置方法&#xff0c;它可以根据本地规则将对象转换为字符串。但主要被用于 Date、Number 和 Array 对象上。 2.具体应用 2.1 date对象中使用 Date 对象上调用 toLocaleString() 方法时&#xff0c;它会根据运行代码的…

基于 Electron+Vite+Vue3+Sass 框架搭建

技术参考 技术描述Electron一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入 Chromium 和 Node.jsElectron Forge用于打包和分发 Electron 应用程序的一体化工具。英文地址在此Vite前端构建工具Vue3用于构建用户界面的 JavaScript 框架vitejs/plugin-vueVite 插…

PlantUML 语法、图标和示例

基本语法 关键字 声明参与者的几个关键字 actor、boundary、control、entity、database、collections、participant 箭头样式 我们可以通过&#xff0c;修改箭头样式&#xff0c;来表达不一样的意思&#xff1a; 表示一条丢失的消息&#xff1a;末尾加 x让箭头只有上半部…

Redis在SpringBoot中遇到的问题:预热,雪崩,击穿,穿透

缓存预热 预热即在产品上线前&#xff0c;先对产品进行访问或者对产品的Redis中存储数据。 原因&#xff1a; 1. 请求数量较高 2. 主从之间数据吞吐量较大&#xff0c;数据同步操作频度较高,因为刚刚启动时&#xff0c;缓存中没有任何数据 解决方法&#xff1a; 1. 使用脚…

Kafka - 生产者

生产者消息对象 public class ProducerRecord<K, V> {private final String topic; // 主题private final Integer partition; //分区号private final Headers headers; //消息头部private final K key; //键private final V value; //值private final Long timestamp; …

opencv 按键开启连续截图,并加载提示图片

背景图小图 键盘监听使用的是pynput 库 保存图片时使用了年月日时分秒命名 原图&#xff1a; from pynput import keyboard import cv2 import time# 键盘监听 def on_press(key):global jieglobal guanif key.char a:jie Trueelif key.char d:jie Falseelif key.char…

配置三个Spring Boot应用并通过Nginx进行反向代理 讨论中

要配置三个Spring Boot应用并通过Nginx进行反向代理&#xff0c;你可以按照以下步骤操作&#xff1a; 步骤 1: 准备Spring Boot应用 确保每个Spring Boot应用都有不同的端口号。例如&#xff0c;你可以设置第一个应用监听8080端口&#xff0c;第二个监听8081端口&#xff0c;…

FPGA JTAG最小系统 EP2C5T144C8N

FPGA的文档没有相应的基础还真不容易看懂&#xff0c;下面是B站上对FPGA文档的解读(本文非对文档解读&#xff0c;只是为个人记录第三期&#xff1a;CycloneIV E最小系统板设计&#xff08;一&#xff09;从Datasheet上获取FPGA的基本参数_哔哩哔哩_bilibili 电源部份 核心电…

TS config

moduleResolution 是 TypeScript 编译器中的一个选项&#xff0c;用于控制如何解析模块导入。这个选项影响着 TypeScript 如何查找和解析 import 和 export 声明中指定的模块。 {"compilerOptions": {"moduleResolution": "Node"//小写也没问题…

SELinux的 getenforce setenforce 配置文件/etc/selinux/config的 SELINUX和SELINUXTYPE

SELinux&#xff08;Security-Enhanced Linux&#xff09;是一个为Linux系统提供访问控制安全策略的安全模块。它是Linux内核的一个功能强大的安全子系统&#xff0c;旨在提供访问控制安全策略机制&#xff0c;以限制程序中特定代码段的权限。SELinux超越了传统的UNIX权限模型&…