SQL server学习09-数据库编程(上)

目录

一,了解T-SQL语言

1,常量(标量值)

2,变量

1)局部变量

2)全局变量

二,内置函数

1,字符串函数

2,数学函数

3,日期时间函数

4,转换函数

三,批处理


 

在SQLserver的应用操作中,存储过程和触发器扮演着相当重要的角色,其基于预编译并存储在SQLserver数据中的特性,不仅能提高应用效率,确保一致性,完成业务规则,更能提高系统运行的速度。这章内容我主要学习数据库编程,学习存储过程,触发器等数据库高级对象的创建。

一,了解T-SQL语言

SQL是关系数据库的标准语言,可以在所有关系数据库上使用,T-SQL(Transaction Structured Query Language)是标准SQL的一种扩展,我们不仅可以利用T-SQL编写的数据库程序完成数据库的各种操作,还可以将其嵌入其他语言,用来让程序与SQLserver沟通。

T-SQL是SQLserver系列产品独有的。

1,常量(标量值)

 表示一个特定数据值的符号。常量的格式取决于它所表示的数据类型:

  1. 数字常量。

    包括整数常量,小数常量和浮点数常量。

    整数常量和小数常量被写成普通的数字形式,由符号(-),数字和小数点构成。

    浮点数常量使用e来指定,常用来表示特别大或者特别小的数据,例如

    1.5e6=1.5 \times 10^{6}=1500000

    1.5e-6=1.5 \times 10^{-6}=0.0000015

    可以看到,与其他编程语言不同,T-SQL对于小数的分类有两种:小数和浮点数。

    如果是其他编程语言,对于小数,都统称为浮点数类型。使用float或double定义。

     
  2. 字符串变量。

    内容包含在单引号内,如果字符串本身包含单引号,则使用两个单引号表示。
    例如,字符串 I'am a Chinese,表示为 ‘I'' am a Chinese'。
     
  3. 日期和时间常量是放在单引号中,由日期,时间以及间隔符构成,例如'1984-03-10'或'03/31/2021'。
     

2,变量

T-SQL中有两类变量:全局变量和局部变量。

局部变量名必须以一个@开头,全局变量名以两个@开头。

1)局部变量

局部变量是用户可定义的变量,只具有局部作用范围(在定义它的语句,批处理或中中使用)。

局部变量用DECLARE命令声明,语法格式如下:

DECLARE @局部变量名 数据类型[,...n]

用SELECT 或SEL给局部变量赋值,语法如下:

SET @局部变量名=具体值 --只给一个局部变量赋值
--或
SELECT @局部变量名=表达式[,...] --可以同时给多个局部变量赋值

任务1,声明一个可以存储10个字符的局部变量@id,并给它赋值“1000010000”。

编写语句如下:

DECLARE @id char(10)
SET @id='1000010000'

任务2,查询“SQLserver DataBase Application principle”课程的学分和学时,保存在变量中。

编写语句如下:

DECLARE @cct int, @cpd int 
SELECT @cct=cct,@cpd=cpd
FROM courses
WHERE cne='SQLserver DataBase Application principle'

如果想要显示变量的值,可以使用以下两个语法。

 可以直接用SELECT显示变量,语法格式如下:

SELECT 变量名[,...n]

 还可以使用PRINT语句,语法如下:

PRINT ''+STR(@局部变量名,length)  --STR函数用于将数值转换为字符串,length表示浮点数转换时的最大长度
PRINT 'courses credit (cct)='+STR(@cct,2)+CHAR(10)+'courses period(cpd)='+STR(@cpd,2)
--CHAR(9):制表符
--CHAR(10):换行符
--CHAR(13):回车

2)全局变量

全局变量是SQL server系统定义并赋值的变量,用来记录SQL server的配置设定值和效能统计等数据。用户不能定义全局变量,也不能给全局变量赋值,只能读取。

常用的全局变量如下表所示👇

常用的全局变量
全局变量名称含义
@@version

当前的SQL server安装的版本,处理器体系结构,生成日期和操作系统

PRINT 'Current version of the SQL server installation='+@@version

@@rowcount

上一条T-SQL语句影响到的数据行数,如下:


PRINT 'The number of rows of data affected by the previous T-SQL statement='+STR(@@rowcount,2)

@@error

执行的上一条T-SQL语句错误号。

@@connections

自SQL server最后一次启动以来,连接或试图连接到SQL server的连接数目
 

PRINT 'Number of SQL server connections='+STR(@@connections)

二,内置函数

SQL server提供了很多内置函数,通过与查询,添加,更新和删除等操作的配合使用,可实现更复杂的功能。T-SQL的常用内置函数有字符串函数,数学函数,日期时间函数和转换函数。

1,字符串函数

字符串函数
函数功能描述
ASCII(character)

返回character的ASCII整数值。参数为字符串时,只取第一个字符。

PRINT 'ASCII(''ABC'')='+STR(ASCII('ABC'))

可以看到,字符‘A’的ASCII码值为65。

CHAR(integer)

返回给定ASCII整数值对应的字符。参数integer为0~255之间的整数。

例如,之前学习的返回一个换行符:CHAR(10)

PRINT 'A'+CHAR(10)+'B'
SPACE(integer)

返回指定个数的空格。

PRINT 'A'+SPACE(10)+'B'

STR(float,length,decimal)

将给定的浮点数float转换成字符串。

length:浮点数转换时的最大长度。

decimal:浮点数转换时保留的小数个数。

例如输出:今年是2024年。

PRINT 'This year is'+SPACE(1)+STR(2024,4)+SPACE(1)+'year'
LEN(string)

返回字符串中的字符个数。

LOWER(string)

将字符串中的字符全部转换为小写。

DECLARE @s VARCHAR(100)
SET @s=LOWER('HELLO WORLD')
PRINT @s
UPPER(string)

和LOWER函数相反,UPPER函数将字符串中的字符全部转换为大写,如下:

DECLARE @s VARCHAR(100)
SET @s=LOWER('HELLO WORLD')
PRINT UPPER(@s)

LTRIM(string)

删除字符串前面(即左边left)的所有空格。

未删除左边空格:

删除左边空格:

RTRIM(string)

删除字符串后面(即右边right)的所有空格。

我发现,如果一个字符串的末尾是空格,在统计字符长度时,并不会加上空格的长度:

因此,我感觉这个函数会用得比较少(毕竟不用也没啥影响)。

LEFT(string,integer)

返回字符串从左边开始的指定个数的字符。

RIGHT(string,integer)

返回字符串从右变开始的指定个数的字符。

删除字符右边的空格,之后再输出结果:

SUBSTRING(string1,start,length)

从字符串的指定位置开始,返回指定个数的字符。例如返回字符串s的全部内容:

REPLACE(string1,string2,string3)

从字符串中的指定内容进行替换。

原始字符串string1

使用新的字符串string3,替换原始字符串string1中的字符串string2

STUFF(string1,start,length,string2)

将字符串插入另一个字符串。

首先删除字符串string1从sart开始共length个字符

之后在字符串string1的开始位置插入字符串string3

DECLARE @s VARCHAR(100)
SET @s='HELLO WORLD          '
PRINT STUFF(@s,1,LEN(@s),'do better every day')
CHARINDEX(string1,string2,start)

在字符串string2中从start指定的字符开始搜索字符串string1,并返回其起始位置,如果没有找到则返回0。

PATINDEX('%pattern%',string)

按照指定模式在字符串string中查找,返回匹配内容第一次出现的起始位置,如果没有找到则返回0。

2,数学函数

 SQL server的数学函数可以实现各种数学运算,常用的数学函数如下表所示:

数学函数
函数功能描述
ABS(number)

返回给定数字的绝对值。

EXP(number)

返回给定数字的指数值。即 e^{number}

e^{-1}= \frac{1}{e}=\frac{1}{2.71828} \approx0.367879

SQRT(number)

返回给定数字的平方根。

CEILING(number)
天花板

(向上取整)。返回大于或等于给定数字的最小整数。

FLOOR(number)
地面

(向上取整)。返回小于或等于给定数字的最大整数。

RAND()
RAND(number)

返回一个0到1之间的随机小数。

函数为空的参数时,随机数会随着运行而改变👇

第一次运行:

第二次运行:

第三次运行:

当我向函数中传入一个数字,随机数就不会随着程序的运行而改变👇

SIGN(number)

返回number的正负号。number为正时返回1,为0时返回0,为负数时返回-1。

POWER(n,a)

返回给定数字的乘幂。即 n^{a}

LOG(number)

返回给定数字的自然对数,即以e为底数的对数值

log_{e}2=ln2 \approx0.693147

计算对数的结果可以使用泰勒级数展开或者是数值积分及查表。也可以直接使用LOG函数得到。

LOG10(number)

返回给定数字的以10为底数的对数值。

log_{10}2=lg2 \approx0.30103

PI()

返回Π的常量值3.14159265358979,精确到小数点后14位?但我在使用的时候发现只能精确到小数点后5位👇

3,日期时间函数

日期时间函数
函数功能
GetDate()

获取当前系统日期和时间。

DECLARE @d datetime
SET @d=GETDATE()
PRINT @d

YEAR(date)

返回日期date中的“年份”。

MONTH(date)

返回日期date中的“月份”。

DAY(date)

返回日期date中的“日”。

DATEPART(datepart,date)

返回日期date中指定datepart的整数

例如,返回日期@d中的年份👇

DATENAME(datepart,date)

返回date中指定detepart的字符串

DATEADD(datepart,number,date)

将指定number时间间隔(有符号整数)与指定日期date(@d)的指定datepart相加后,返回该date。.

例如,在日期@d的年份基础上加上1。

DATEDIFF(datepart,startdate,enddate)

返回指定的startdate和enddate之间所跨的指定datepart边界的计数。

DECLARE @d1 datetime='2003/12/02'
DECLARE @d2 datetime =GETDATE();
PRINT DATEDIFF(year,@d1,@d2)

 其中,参数detepart的取值如下表所示。

datepart
日期部分缩写含义
yearyy,yyyy
quarterqq,q季度,1~4
monthmm,m月,1~12
dayofyeardy,y一年中的第几日,1~366
daydd,d一月中的第几日,1~31

week

wk,ww

一年中的第几周,1~52
weekdayDw

星期几,一个星期从星期日开始,

DATENAME函数返回星期日到星期六;

DATEPART返回1~7(1:星期日,2:星期一)

hourHh小时
minutemin分钟
secondss,s
millisecondms毫秒

小任务:查询所有学生的学号,姓名和年龄。

编写语句如下:

USE StuScore
UPDATE students SET sbd='2003-12-2' WHERE sno=2
-- 根据查询记录创建新的表  
DROP TABLE S1
SELECT sno AS 学号,sne AS 姓名,YEAR(GETDATE())-YEAR(sbd) AS 年龄   --DATEDIFF(year,sbd,GETDATE()) AS 年龄
INTO S1
FROM students
SELECT sne,sbd FROM students
SELECT * FROM S1 

4,转换函数

 转换函数可以进行数据类型转换。

在一般情况下,SQLserver会自动完成数据类型的转换,但当数据类型无法自动转换时,需要用户通过数据库提供的函数来转换。有以下两个转换函数。

  1. CAST(expression as data_type [(length)])

    将表达式expression表示的值转换为参数data_type指定的目标数据类型;

    参数length 指定目标数据类型长度,是可选参数,默认值为30。

    如下,将字符串类型转换成日期类型。


     
  2. CONVERT(date_type[(length)],expression[,style])

    与CAST函数的功能类似,参数style规定日期/时间的输出方式。

    如下,以不同格式输出系统当前时间。

    PRINT CONVERT(VARCHAR(20),GETDATE()) --字符串形式输出日期
    +CHAR(10)
    +CONVERT(VARCHAR(20),GETDATE(),110)
    +CHAR(10)
    +CONVERT(VARCHAR(20),GETDATE(),120)

三,批处理

批处理是包含一个或多个T-SQL语句的组,从客户端一次性地发送到服务器端。

SQLserver服务器将批处理语句编译成一个执行单元。 

批处理能够有效地减少客户端到服务器的网络往返次数。

GO:

  1. GO是批处理的结束符。
  2. 当遇到GO关键字时,GO之前的语句会作为一个批处理直接传到SQLserver实例执行。
  3. GO关键字本身并不是一个T-SQL语句。 

一般一个批处理中可以包含多条T-SQL语句,但是有一些特殊的地方:

以CREATE关键字开头的语句必须是批处理中唯一的语句:

  1. CREATE RULE
  2. CREATE DEFAULT 
  3. CREATE PROCEDURE
  4. CREATE TRIGGER
  5. CREATE VIEW

小任务:使用学生成绩管理数据创建表table1,视图view1。

如果不在创建视图的语句前面加上GO关键字,就会报错。

有问题请在评论区留言或者是私信我,回复时间不超过一天。

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

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

相关文章

CentOS7系统下部署tomcat,浏览器访问localhost:8080/

我这里以本地的VMware虚拟机创建的CentOS为例,来讲解部署tomcat的步骤,阿里云的服务器ECS部署只需设置下安全组规则即可,Centos内一样。 首先启动VM,输入密码进入centos,用xshell连接 2. 在家目录输入 cd /usr/local 进入local目录, 输入 mkdir java ,创建java目录…

解析 Ingress-Nginx 故障:排查思路与方法

文章目录 一、什么是Ingress-Nginx二、故障排除1.1Ingress-Controller日志和事件检查 Ingress 资源事件检查 Nginx 配置检查使用的服务是否存在调试日志 1.2对 Kubernetes API 服务器的认证服务认证服务账户Kube-Config 1.3使用GDB和Nginx1.4在 Nginx 4.2.5 或其他版本&#xf…

蓝桥杯物联网开发板硬件组成

第一节 开发板简介 物联网设计与开发竞赛实训平台由蓝桥杯大赛技术支持单位北京四梯科技有限公司设计和生产,该产品可用于参加蓝桥杯物联网设计与开发赛道的竞赛实训或院校相关课程的 实践教学环节。 开发板基于STM32WLE5无线微控制器设计,芯片提供了25…

【实操之 图像处理与百度api-python版本】

1 cgg带你建个工程 如图 不然你的pip baidu-aip 用不了 先对图片进行一点处理 $ 灰度处理 $ 滤波处理 参考 import cv2 import os def preprocess_images(input_folder, output_folder):# 确保输出文件夹存在if not os.path.exists(output_folder):os.makedirs(output_fol…

【LuaFramework】LuaFramework_UGUI_V2框架学习

GitHub - jarjin/LuaFramework_UGUI_V2: 基于tolua的热更新框架V2 旧版本是Unity 5.0,这个是新版本支持更高版本的 导入工程后先清除wrap 然后重新生成wrap,你会发现有个报空null,框架的问题总结下所有的框架wrap相关报错问题和修复方法&…

重温设计模式--状态模式

文章目录 状态模式(State Pattern)概述状态模式UML图作用:状态模式的结构环境(Context)类:抽象状态(State)类:具体状态(Concrete State)类&#x…

16×16LED点阵字符滚动显示-基于译码器与移位寄存器(设计报告+仿真+单片机源程序)

资料下载地址:​1616LED点阵字符滚动显示-基于译码器与移位寄存器(设计报告仿真单片机源程序)​ 1、功能介绍 设计1616点阵LED显示器的驱动电路,并编写程序实现在1616点阵LED显示器上的字符滚动显示。1616点阵LED显示器可由4块88点阵LED显示器构成。可采…

Scala图书管理系统

项目创建并实现基础UI package org.appimport scala.io.StdInobject Main {def main(args: Array[String]): Unit {var running truewhile (running) {println("欢迎来到我的图书管理系统,请选择")println("1.查看所有图书")println("2…

WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)

文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…

WPF+MVVM案例实战与特效(四十八)-实现一个自定义饼状图控件

文章目录 1、案例效果2、案例实现1、PieControl.xaml 代码2、样式代码如下:1、案例效果 2、案例实现 1、PieControl.xaml 代码 代码如下(示例): namespace PieControl {public class PieControl: Control

玩转OCR | 探索腾讯云智能结构化识别新境界

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

「下载」智慧城市“一网统管”总体框架全解析:整体架构、运营体系规划、具体运营内容、典型场景、运营工具平台

智慧城市“一网统管”,通过先进的信息技术手段,实现城市管理的智能化、协同化、精准化和高效化。 本文将基于《智慧城市“一网统管”运营研究报告2024》的内容,从发展背景及趋势、“一网统管”运营总体框架、运营体系规划、“一网统管”运营内…

突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向

随着我国经济快速发展和人民生活水平不断提升,汽车保有量截至2023年9月底就已达到了3.3亿,同比增长6.32%。庞大的汽车保有量对我国的环境和能源都产生了巨大的压力,具备节能环保优势的新能源汽车对于有效解决环境恶化和能源危机问题具有重要意…

建投数据与腾讯云数据库TDSQL完成产品兼容性互认证

近日,经与腾讯云联合测试,建投数据自主研发的人力资源信息管理系统V3.0、招聘管理系统V3.0、绩效管理系统V2.0、培训管理系统V3.0通过腾讯云数据库TDSQL的技术认证,符合腾讯企业标准的要求,产品兼容性良好,性能卓越。 …

电力通信规约-104实战

电力通信规约-104实战 概述 104规约在广泛应用于电力系统远动过程中,主要用来进行数据传输和转发,本文将结合实际开发实例来讲解104规约的真实使用情况。 实例讲解 因为个人技术栈是Java,所以本篇将采用Java实例来进行讲解。首先我们搭建一…

【3D打印机】启庞KP3S热床加热失败报错err6

最近天冷,打印机预热突然失败,热床无法加热,过了一段时间报错err6,查看另一篇资料说是天气冷原因,导致代码的PID控温部分达不到预期加热效果,从而自检报错,然后资料通过修改3D打印机代码的方式进…

SpiderFlow平台v0.5.0流程的执行过程

流程执行过程: 1. 流程启动 流程的执行通常从一个 开始节点 开始,该节点是整个爬虫任务的起点。开始节点没有实际的功能作用,主要作用是标记流程的起始。 执行顺序:在执行过程中,系统按照流程中的连接线顺序依次执行…

MySQL追梦旅途之慢查询分析建议

一、找到慢查询 查询是否开启慢查询记录 show variables like "%slow%";log_slow_admin_statements: 决定是否将慢管理语句(如 ALTER TABLE 等)记录到慢查询日志中。 log_slow_extra : MySQL 和 MariaDB 中的一个系…

Liveweb视频融合共享平台在果园农场等项目中的视频监控系统搭建方案

一、背景介绍 在我国的大江南北遍布着各种各样的果园,针对这些地处偏僻的果园及农场等环境,较为传统的安全防范方式是建立围墙,但是仅靠围墙仍然无法阻挡不法分子的有意入侵和破坏,因此为了及时发现和处理一些难以察觉的问题&…

【Jenkins】持久化

文章目录 持续集成CI持续部署CD部署部署到linux服务器 持续集成好处: 持续集成CI 持续集成(Continuous integration,简称CI)指的是频繁地(一天多次)将代码集成到主干。 持续集成的目的就是让产品可以快速…