当前位置: 首页 > news >正文

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关键字,就会报错。

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

相关文章:

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,但需要加权 或者,在不使用加权的情…...

vuex如何进行状态管理?

**Vuex:是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据共享。** (1) 如果是Vue2的环境,不能使用vuex4的版本,所以我们需要安装vuex3以下的版本安装。 创建项目:vue crea…...

嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目

此项目是基于人脸识别的考勤系统开发,包括如下模块: 1、人脸识别考勤系统GUI界面设计,包括: (1)Qt环境(window环境/linux环境) ; (2)Qt工程创建分析; &am…...

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…...

评估大语言模型在药物基因组学问答任务中的表现:PGxQA

​这篇文献主要介绍了一个名为PGxQA的资源,用于评估大语言模型(LLM)在药物基因组学问答任务中的表现。 研究背景 药物基因组学(Pharmacogenomics, PGx)是精准医学中最有前景的领域之一,通过基因指导的治疗…...

在本地和远程转储域控制器哈希

更多内网知识课前往无问社区查看http://www.wwlib.cn 无凭据 - ntdsutil 如果您没有凭据,但有权访问 DC,则可以使用 lolbin ntdsutil.exe转储 ntds.dit: powershell "ntdsutil.exe ac i ntds ifm create full c:\temp q q" 我们…...

基于SSM+Vue的心理咨询问诊系统+LW示例参考

1.项目介绍 项目角色:管理员、患者(普通用户)、医师项目模块:医生管理、患者管理、科室管理、咨询管理、预约管理、急救知识、患者病历等测试环境:idea2024、tomcat8.5、maven3、jdk8、nodeV14.16.1、mysql5.7技术栈&…...

基于TMS320X281X/F28335的DSP入门到精通01_如何开始DSP的学习与开发

本部分开始基于《手把手教你学DSP—基于TMS320X281X》,《手把手教你DSP基于MS320F28335 》、《TMS320X281x DSP原理及C程序开发》,另外结合B站视频进行DSP嵌入式的学习。 《手把手教你学DSP—基于TMS320X281X》介绍的相对更为基础和详细,《手…...

Java爬虫获取1688 item_search_img接口详细解析

概述 1688作为中国领先的B2B电商平台,提供了丰富的API接口供开发者获取商品信息。item_search_img接口允许通过图片搜索商品,这对于需要基于图片进行商品查找的应用场景非常有用。本文将详细介绍如何使用Java爬虫技术获取1688的item_search_img接口数据…...

Java 连接 FTP 服务器全解析

Java 连接 FTP 服务器全解析 一、引言 在许多企业级应用和数据处理场景中,与 FTP 服务器进行交互是一项常见且重要的任务。Java 提供了强大的工具和库来实现与 FTP 服务器的连接、文件传输、目录操作等功能。本文将详细介绍如何使用 Java 连接 FTP 服务器&#xf…...

字节跳动C++面试题及参考答案(下)

说说B 树 b + 树 B 树: B 树是一种平衡的多路查找树,它的设计目的是为了减少磁盘 I/O 操作,适用于存储大量的数据并进行高效的查找、插入和删除操作。B 树的节点可以有多个子节点(通常称为多路),每个节点包含多个关键字,关键字之间是有序的。 B 树的结构特点包括:根节点…...