世界十大病毒
【基础5】SQL系统内置函数T-SQL编程以及作业系统内置函数
1. 字符函数,取字符串⾥的字符
--字符函数:
--返回某个字符在⼀个字符串⾥的位置
lect charindex('f','abfc')
lect*from Employees
--取⼦串函数,取字符串⾥的⼏个
lect left('abcedg',4)--从左边开始取
lect right('abcedg',4)--从右侧开始倒回来取
lect姓名,left(地址,3)城市from Employees --查询员⼯城市
--取⼦串,lect substring(字符串,从哪个字符开始取,取⼏个字符)
lect substring('qwerr',2,3)--从第⼆个开始取,取三个字符
lect姓名, substring(地址,1,3)城市from Employees
--替换函数 lect replace(字符串,需要替换的字符,⽤哪个字符替换) 成批替换
lect replace('adgNbdNag','N','n')
--全部变为天津
update Employees t地址='天津'where地址like'北京%'
--修改北京为天津
update Employees t地址=replace(地址,substring(地址,1,2),'天津')
酷热
2. 替换函数
--替换函数 lect stuff (字符串,从哪个字符串开始取, 取⼏个,⽤来替换的字符) 字符(串)要加英⽂单引号指定位置替换--※如果取的字符数为负,则返回空字符串。
--※如果取的字符数的长度⼤于字符串,则最多可以删除到字符串中的最后⼀个字符。
--※如果取的字符数为零,则不删除字符直接在指定位置插⼊内容。
lect stuff ('abcdef',4,3,'d')
--如果替换位置为 NULL,则在不插⼊任何内容的情况下删除字符。
lect stuff ('abcdef',4,3,null)
舍什么逐什么成语update Employees t地址=stuff(地址,1,2,'北京')
3. 删除空格/添加空格函数
--删除空格函数
lect ltrim(' dfalkg')--删除左侧空格
lect rtrim('dfalkg ')--删除右侧空格
lect len(' dfalkg')--统计字符个数
lect len(ltrim(' dfalkg'))
lect len(rtrim('dfalkg '))
lect*from Employees
--空格在前⾯
update Employees t姓名=' 赵飞燕'where编号='1001'--加空格
update Employees t姓名=ltrim(姓名)where编号='1001'--删空格
--空格在中间
update Employees t姓名='赵飞燕'where编号='1001'--加空格
update Employees t姓名=replace(姓名,' ','')where编号='1001'--删除空格
update Employees t姓名=stuff(姓名,charindex(' ',姓名),1,'')where编号='1001'--删空格
lect'abcdefg'+space(3)+'hijklmn'
--查找出姓李/王的⼈
lect*from Employees where姓名like'[李,王]%'
lect*from Employees where left(姓名,1)='李'or left(姓名,1)='王'
lect*from Employees where substring(姓名,1,1)='李'or substring(姓名,1,1)='王'
4. ⽇期函数
--⽇期函数
lect getdate()--取系统时间
--取系统时间的年、⽉、⽇、⼩时、分钟、秒、毫秒
lect year(getdate()),month(getdate()),day(getdate())
lect datepart(hh,getdate()),datepart(mi,getdate()),datepart(ss,getdate()),datepart(ms,getdate())
--返回数字类型
lect datepart(yy,getdate()),datepart(mm,getdate()),datepart(dd,getdate()),
datepart(hh,getdate()),datepart(mi,getdate()),datepart(ss,getdate()),datepart(ms,getdate())
--返回字符类型
lect datename(yy,getdate()),datename(mm,getdate()),datename(dd,getdate()),
datename(hh,getdate()),datename(mi,getdate()),datename(ss,getdate()),datename(ms,getdate())
--dw:今天是星期⼏,dayweek week:今天是今年第⼏个周
lect datepart(dw,getdate()),datepart(week,getdate())
lect datename(dw,getdate()),datename(week,getdate())
--dateadd(年,在后⾯时间的基础上加/减⼏(年),时间/系统时间)
lect dateadd(yy,10,getdate())
lect dateadd(yy,-10,getdate())
--datediff:两⽇期之间的差(yy,后⾯的减这个,⽇期)
lect datediff(yy,'2000-5-8',getdate())
lect*from Goods
lect商品名称, datediff(yy,进货时间,getdate())年限from Goods
lect商品名称,year(getdate())-year(进货时间)年限from Goods
5. 数学函数
--数学函数
--四舍五⼊函数round(数字,保留⼏位)
lect round(78.89,1)
lect round(78.894,2)
--转换函数 convert(转换成的指定类型,需要转换的) 将⼀个函数运算结果从⼀个类型转换为另⼀个类型
lect convert(char(3),100)
lect len(convert(char(3),100))--字符个数三个
lect convert(decimal(3,1),round(78.89,1))数值
--print '数值是:' +convert(decimal(3,1),round(78.89,1)) 出错:从数据类型 varchar 转换为 numeric 时出错。
--改正:
print'数值是:'+convert(varchar(10),convert(decimal(3,1),round(78.89,1)))
--转换函数 cast cast(需要转换的 as 指定类型)
lect cast(100as char(3))
lect len(cast(100as char(3)))
lect cast(round(78.89,1)as decimal(3,1))数值
print'数值是:'+ cast(cast(round(78.89,1)as decimal(3,1))as varchar(10))
T-SQL编程
1. 注释以及变量
-- 两个-是单⾏注释
/*
这是多⾏注释
这是多⾏注释
*/
--变量
/*
局部变量:1、必须以标记@作为前缀 @name
2、局部变量的使⽤也是先声明,再赋值
3、使⽤完后释放掉,不能永久性的保存下来。
方脸适合什么发型>写景散文摘抄全局变量:1、必须以标记@@作为前缀 @@rvername @@error @@identity @@version
2、全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值。
*/
--以下语句执⾏时,要从声明⼀直选中到输出语句,因为这个是局部变量,⼀⾏⼀⾏执⾏出现以下错误
--必须声明标量变量 "@code"。必须声明标量变量 "@name"。
-- 声明变量
declare@code varchar(4),@name varchar(8),@sum int
--变量赋值
t@code='1301'
lect@name=姓名from Employees where编号=@code
lect@sum=sum(数量)from Sell where售货员⼯编号=@code
--输出语句
lect@name姓名,@sum销售数量和
print'姓名:'+@name+space(4)+'数量和:'+convert(char(3),@sum)
--在以上两⾏输出语句执⾏完之后,中间显⽰了:(⼀⾏受影响)
t nocount on--no count 不提⽰受影响了,如果不希望显⽰(n⾏受影响),则每⼀个新建的查询⽂件都需要在开头执⾏此语句
t nocount off--关闭之后如果需要再次显⽰
--全局变量
lect @@rvername服务器名称
lect @@rvername as服务器名称
update Employees t性别='⼥'where编号='1001'
inrt into Employees values(1001,'李四',1,'采购部','194847364','北京市建国路22号')
lect @@error--@@error 显⽰刚刚执⾏的sql语句的错误数
lect @@identity--查看刚刚插⼊的数据的标识列是第⼏列
inrt into Sell values(9,5,getdate(),'1301')
lect @@version--查看SQL版本编号
2. 逻辑控制语句中的IF语句
--IF
--if 条件表达式
--SQL语句条件成⽴执⾏这条语句
if exists(lect*from sysdatabas where name='abc') sysobjects 全部数据库对象 sysindexes 全部索引 sysdatabas 全部数据库drop databa abc
create databa abc
go
/* if 条件表达式如果语句块有多个SQL语句,则需要在语句前+begin ,在后⾯+end来表⽰这是⼀个语句块
begin
SQL语句1
SQL语句2
end
el
SQL语句2 */
召回通知declare@m int,@n int
t@m=31
t@n=30
if@m>@n
print'较⼤的数是:'+convert(varchar(10),@m)
print'较⼤的数是:'+cast(@n as varchar(10))
--判断1001是否做过销售,没有销售输出没有销售,有销售输出数量和declare@code varchar(4),@name varchar(8),@sum int--声明变量t@code='1303'--变量赋值
lect@name=姓名from Employees where编号=@code
if exists(lect售货员⼯编号from Sell where售货员⼯编号=@code) begin
lect@sum=sum(数量)from Sell where售货员⼯编号=@code print'姓名:'+@name+space(4)+'数量和:'+convert(char(3),@sum) end
el
print@code+'没有销售数量'
go
/* 多重IF
if 条件
if 条件
el
el
if 条件
el
*/
--判断三个数哪个最⼤
declare@a int,@b int,@c int
t@a=40
t@b=60
t@c=50
if@a>@b
if@a>@c
print'最⼤的数是:'+cast(@a as varchar(3))
el
print'最⼤的数是:'+cast(@c as varchar(3))
el
if@b>@c
print'最⼤的数是:'+cast(@b as varchar(3))
el
print'最⼤的数是:'+cast(@c as varchar(3))
/
*
if 条件
语句
el if 条件
语句
el if 条件
·······
el
*/
--判断成绩
declare@score int
t@score=59
if@score between0and100--@score >= 0 and @score <=100学习空乘的学校
if@score>=90
print'优'
el if@score>=80
print'良'
el if@score>=70
print'中'
el if@score>=60
print'及格'
print'挂科'
el
print'您输⼊的成绩有误,请重新输⼊'
--判断1001是否做过销售,没有销售输出没有销售,有销售输出数量和并且判读是什么员⼯
declare@code varchar(4),@name varchar(8),@sum int--声明变量
t@code='1301'--变量赋值
武汉到昆明
lect@name=姓名from Employees where编号=@code
if exists(lect*from Sell where售货员⼯编号=@code)-- @code in (lect 售货员⼯编号 from ll) begin
lect@sum=sum(数量)from Sell where售货员⼯编号=@code
print'姓名:'+@name+space(4)+'数量和:'+convert(char(3),@sum)
if@sum>=10
print'优秀员⼯'
el if@sum>=5
print'合格员⼯'
el
print'不合格员⼯'
end
el
print@code+'没有销售数量'
go
3. ca语句
-- ca end 多分⽀语句 ca必须嵌套在表达式中使⽤
/* ca
when 条件表达式 then 结果
when 条件表达式 then 结果
when 条件表达式 then 结果
when 条件表达式 then 结果
when 条件表达式 then 结果
el 结果
end */
lect*into goods1 from Goods
lect*from Goods
lect*from goods1
--零售价⼤于5000的+500,⼤于三千的+300 ,其余的+100
update goods1 t零售价=ca
when零售价>=5000then零售价+500
when零售价>=3000then零售价+300
el零售价+100
end
--判断1001是否做过销售,没有销售输出没有销售,有销售输出数量和并且判读是什么员⼯
declare@code varchar(4),@name varchar(8),@sum int--声明变量
t@code='1301'--变量赋值
lect@name=姓名from Employees where编号=@code
if exists(lect售货员⼯编号from Sell where售货员⼯编号=@code)
begin
lect@sum=sum(数量)from Sell where售货员⼯编号=@code
print'姓名:'+@name+space(4)+'数量和:'+convert(char(3),@sum)