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,常量(标量值)
表示一个特定数据值的符号。常量的格式取决于它所表示的数据类型:
- 数字常量。
包括整数常量,小数常量和浮点数常量。
整数常量和小数常量被写成普通的数字形式,由符号(-),数字和小数点构成。
浮点数常量使用e来指定,常用来表示特别大或者特别小的数据,例如
可以看到,与其他编程语言不同,T-SQL对于小数的分类有两种:小数和浮点数。
如果是其他编程语言,对于小数,都统称为浮点数类型。使用float或double定义。
- 字符串变量。
内容包含在单引号内,如果字符串本身包含单引号,则使用两个单引号表示。
例如,字符串 I'am a Chinese,表示为 ‘I'' am a Chinese'。
- 日期和时间常量是放在单引号中,由日期,时间以及间隔符构成,例如'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安装的版本,处理器体系结构,生成日期和操作系统 |
@@rowcount | 上一条T-SQL语句影响到的数据行数,如下: |
@@error | 执行的上一条T-SQL语句错误号。 |
@@connections | 自SQL server最后一次启动以来,连接或试图连接到SQL server的连接数目 |
二,内置函数
SQL server提供了很多内置函数,通过与查询,添加,更新和删除等操作的配合使用,可实现更复杂的功能。T-SQL的常用内置函数有字符串函数,数学函数,日期时间函数和转换函数。
1,字符串函数
函数 | 功能描述 |
ASCII(character) | 返回character的ASCII整数值。参数为字符串时,只取第一个字符。 可以看到,字符‘A’的ASCII码值为65。 |
CHAR(integer) | 返回给定ASCII整数值对应的字符。参数integer为0~255之间的整数。 例如,之前学习的返回一个换行符:CHAR(10) |
SPACE(integer) | 返回指定个数的空格。 |
STR(float,length,decimal) | 将给定的浮点数float转换成字符串。 length:浮点数转换时的最大长度。 decimal:浮点数转换时保留的小数个数。 例如输出:今年是2024年。 |
LEN(string) | 返回字符串中的字符个数。 |
LOWER(string) | 将字符串中的字符全部转换为小写。 |
UPPER(string) | 和LOWER函数相反,UPPER函数将字符串中的字符全部转换为大写,如下: |
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 |
CHARINDEX(string1,string2,start) | 在字符串string2中从start指定的字符开始搜索字符串string1,并返回其起始位置,如果没有找到则返回0。 |
PATINDEX('%pattern%',string) | 按照指定模式在字符串string中查找,返回匹配内容第一次出现的起始位置,如果没有找到则返回0。 |
2,数学函数
SQL server的数学函数可以实现各种数学运算,常用的数学函数如下表所示:
函数 | 功能描述 |
ABS(number) | 返回给定数字的绝对值。 |
EXP(number) | 返回给定数字的指数值。即 |
SQRT(number) | 返回给定数字的平方根。 |
CEILING(number) 天花板 | (向上取整)。返回大于或等于给定数字的最小整数。 |
FLOOR(number) 地面 | (向上取整)。返回小于或等于给定数字的最大整数。 |
RAND() RAND(number) | 返回一个0到1之间的随机小数。 函数为空的参数时,随机数会随着运行而改变👇 第一次运行: 第二次运行: 第三次运行: 当我向函数中传入一个数字,随机数就不会随着程序的运行而改变👇 |
SIGN(number) | 返回number的正负号。number为正时返回1,为0时返回0,为负数时返回-1。 |
POWER(n,a) | 返回给定数字的乘幂。即 |
LOG(number) | 返回给定数字的自然对数,即以e为底数的对数值 计算对数的结果可以使用泰勒级数展开或者是数值积分及查表。也可以直接使用LOG函数得到。 |
LOG10(number) | 返回给定数字的以10为底数的对数值。 |
PI() | 返回Π的常量值3.14159265358979,精确到小数点后14位?但我在使用的时候发现只能精确到小数点后5位👇 |
3,日期时间函数
函数 | 功能 |
GetDate() | 获取当前系统日期和时间。 |
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边界的计数。 |
其中,参数detepart的取值如下表所示。
日期部分 | 缩写 | 含义 |
year | yy,yyyy | 年 |
quarter | qq,q | 季度,1~4 |
month | mm,m | 月,1~12 |
dayofyear | dy,y | 一年中的第几日,1~366 |
day | dd,d | 一月中的第几日,1~31 |
week | wk,ww | 一年中的第几周,1~52 |
weekday | Dw | 星期几,一个星期从星期日开始, DATENAME函数返回星期日到星期六; DATEPART返回1~7(1:星期日,2:星期一) |
hour | Hh | 小时 |
minute | min | 分钟 |
second | ss,s | 秒 |
millisecond | ms | 毫秒 |
小任务:查询所有学生的学号,姓名和年龄。
编写语句如下:
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会自动完成数据类型的转换,但当数据类型无法自动转换时,需要用户通过数据库提供的函数来转换。有以下两个转换函数。
- CAST(expression as data_type [(length)])
将表达式expression表示的值转换为参数data_type指定的目标数据类型;
参数length 指定目标数据类型长度,是可选参数,默认值为30。
如下,将字符串类型转换成日期类型。
- 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:
- GO是批处理的结束符。
- 当遇到GO关键字时,GO之前的语句会作为一个批处理直接传到SQLserver实例执行。
- GO关键字本身并不是一个T-SQL语句。
一般一个批处理中可以包含多条T-SQL语句,但是有一些特殊的地方:
以CREATE关键字开头的语句必须是批处理中唯一的语句:
- CREATE RULE
- CREATE DEFAULT
- CREATE PROCEDURE
- CREATE TRIGGER
- CREATE VIEW
小任务:使用学生成绩管理数据创建表table1,视图view1。
如果不在创建视图的语句前面加上GO关键字,就会报错。
有问题请在评论区留言或者是私信我,回复时间不超过一天。
相关文章:

SQL server学习09-数据库编程(上)
目录 一,了解T-SQL语言 1,常量(标量值) 2,变量 1)局部变量 2)全局变量 二,内置函数 1,字符串函数 2,数学函数 3,日期时间函数 4&#x…...

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
在刚刚过去的 FlutterInProduction 活动里,Flutter 官方除了介绍「历史进程」和「用户案例」之外,也着重提及了未来相关的 roadmap ,其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…...

java全栈day19--Web后端实战(java操作数据库3)
一、MyBatis 1.1介绍 前提引入: controller(控制层)作用:接受请求,响应数据 service(业务层)作用:负责具体的逻辑处理 dao(持久层)作用:数据访问层 一般的访问流程:浏览器发起请求过来,先…...

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802958.html?templateId1718516 问题现象 Mybatis-Plus是Mybatis的增强工具,旨在简化开发者的CRUD操作,目前被广泛应用,Mybatis-Plus框架适配了多种…...

Ansible 批量管理华为 CE 交换机
注:本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地:贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具,AnsibleWorks 成立于 2012 年&a…...
基于自定义注解与 AOP 切面实现接口日志全面数据库存储
基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Linux可执行文件,从而显著提高启动速度…...

单片机:实现驱动超声波(附带源码)
单片机实现驱动超声波模块 超声波模块(如HC-SR04)广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机(如51系列单片机)驱动超声波模块&am…...
2025.01.15python商业数据分析top2
一、 导入项目 导入项目、准备项目数据 import pandas as pd# 文件路径为python文件位置下的相对路径dwxpd.read_excel("电蚊香套装市场近三年交易额.xlsx") fmfzpd.read_excel("防霉防蛀片市场近三年交易额.xlsx") msmcpd.read_excel("灭鼠杀虫剂市…...
信息系统项目管理-绩效考核
1.1.组织战略 组织的产品和服务战略的类型通常可以分为:技术密集型、()、目标动态型。 A市场导向型 B成本导向型 C人力密集型 D产品导向型 答案B 在组织的四项基本能力中,建立战略性奖励措施,根据员工对组织的贡献&am…...
【Linux】数据呈现
一、数据的输入与输出 1、标准文件描述符 Linux系统会将每个对象都当做文件来处理,包括输入和输出。它用文件描述符来标识每个文件对象。 文件描述符是一个非负整数,唯一会标识的是会话中打开的文件。每个进程一次最多可以打开9个文件描述符。bash sh…...
oracle 加字段和字段注释 sql
在 Oracle 数据库中,你可以使用 ALTER TABLE 语句来添加字段,并使用 COMMENT ON COLUMN 语句来添加字段注释。以下是一个示例: 假设你有一个名为 employees 的表,你想要添加一个名为 email 的字段,并为其添加注释。 …...

计算机网络压缩版
计算机网络到现在零零散散也算过了三遍,一些协议大概了解,但总是模模糊糊的印象,现在把自己的整体认识总结一下,(本来想去起名叫《看这一篇就够了》,但是发现网上好的文章太多了,还是看这篇吧&a…...
一文了解 gis 相关服务=》及前端地图服务相关总结
文章目录 概要OGC技术名词解释cesium 应用案例openlayers 中应用实例XYZ服务OSM服务WMS服务WMTS服务WFS服务 mapbox 应用实例矢量瓦片服务栅格瓦片服务WMS服务WFS服务 leaflet 中 地图服务实例加载OpenStreetMap瓦片图层加载自定义XYZ瓦片图层加载WMS服务图层加载WFS服务图层加…...
Brocade G610 配置
配置流程 zone创建–>cfg创建–>ip配置–>cfg启动并保存 查看端口信息 G610:admin> switchshow switchName: G610 switchType: 170.5 switchState: Online switchMode: Native switchRole: Principal switchDomain: 1 switchId: ff…...
DuetWebControl 开源项目常见问题解决方案
DuetWebControl 开源项目常见问题解决方案 DuetWebControl A completely new web interface for the Duet electronics [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/du/DuetWebControl 一、项目基础介绍 DuetWebControl 是一个为 RepRapFirmware 设计的完全响…...

亚信安全举办“判大势 悟思想 强实践”主题党日活动
为深入学习和贯彻党的二十届三中全会精神,近日,亚信安全举办了 “学习贯彻党的二十届三中全会精神——‘判大势 悟思想 强实践’党日活动”,并取得圆满成功。 本次活动特邀南京市委宣讲团成员、南京市委党校市情研究中心主任王辉龙教授出席。…...

Go怎么做性能优化工具篇之基准测试
一、什么是基准测试(Benchmark) 在 Go 中,基准测试是通过创建以 Benchmark 开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的…...

vue3国际化,主题切换
国际化 安装依赖 pnpm install i18n pnpm install vue-i18n main.js import { createApp } from vue import App from ./App.vue import { i18n } from /i18n/index; const app createApp(App) app.use(i18n); app.mount(#app) 根目录创建i18n文件夹,创建3个文件&…...

Linux Shell 脚本编程基础
打开kali,Xshell连接 一、 vim 1.sh 可利用 #! /bin/bash, #! /bin/dash ,#! bin/sh 这三种脚本解释器不论哪种,最终都是调用 dash 在1.sh内加入内容,尝试执行,./1.sh,但需要加权 或者,在不使用加权的情…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...