我个人感觉数据库这方面对于程序员来说很重要,无论是对于JAVA程序员还是DOTNET程序员以及其他编程人员来说都是必须掌握的。为了帮助大家更好的来回顾T-SQL,本人利用空闲的时间整理的一下T-SQL的语句和语法。希望对大家有用!
好的!我们先来看几个图像:
[b]棱形[/b][img]http://files.jb51.net/file_images/article/201207/201207270833143.jpg[/img]
[b]三角形[img]http://files.jb51.net/file_images/article/201207/201207270833144.jpg[/img]
正方形[/b][img]http://files.jb51.net/file_images/article/201207/201207270833145.jpg[/img]
[b]圆形[/b][img]http://files.jb51.net/file_images/article/201207/201207270833146.jpg[/img]
[b]
矩形[/b]
[img]http://files.jb51.net/file_images/article/201207/201207270833147.jpg[/img]
[b]梯形[img]http://files.jb51.net/file_images/article/201207/201207270833148.jpg[/img]
[/b]
上面这些图形都是用T-SQL实现的,文章的最后我们一起来用T-SQL画出这些图形。
首先,我们开始回顾一下T-SQL的基本语法:
[b]函数[/b]
[b]
abs(x)[/b][b]:求绝对值[/b];
[b]
sqrt(x)[/b]:[b]求平方根[/b];
[b]
rand([0])[/b]:[b]返回[/b][b]0~1[/b][b]之间的随机float[/b][b]值[/b];
[b]
floor(X)[/b][b]:返回小于或等于X[/b][b]值的最大整数[/b];
例: select floor(34.5) 值为:34
[b]
ceiling(X)[/b][b]:返回大于或等于X[/b][b]值的最小整数;[/b]
例: select ceiling(34.5) 值为:35
[b]
round(x[/b][b]
,length)[/b][b]:四舍五入函数,length[/b][b]为正,则对X[/b][b]小数位数四舍五入,length[/b][b]为负,则对X[/b][b]从小数点左边length[/b][b]位起四舍五入,若length[/b][b]既为负数且其绝对值大于X[/b][b]整数部分 [/b][b]数字个数,则函数值为0;[/b]
例: select ROUND(63.567, 1) 值为:63.600 select ROUND(63.567, -1) 值为:60.000 select ROUND(63.567, 0) 值为:64.000 select ROUND(63.567, -3) 值为:0.000
[b]
Sign(X)[/b][b]:求符号函数,X>0[/b][b]则sign(x)=1; X=0 [/b][b]则sign(X)=0;X<0 [/b][b]则sign(X)=-1 [/b]
例: select sign(-3) 值为:-1 select sign(3) 值为:1 select sign(0) 值为:0
[b]
Power(X,y)[/b][b]:求X[/b][b]的y[/b][b]次方;[/b]
例: select power(4,2) 值为 :16
[b]字符串函数[/b]
[b]
ASCII([/b][b]
串)[/b][b]:返回字符表达式最左端字符的ASCII [/b][b]码值;[/b]
例: select ASCII('bc') 值为:98
[b]
CHAR(ASCII[/b][b]
码)[/b][b]:用于将ASCII [/b][b]码转换为字符,如果没有输入0 ~ 255 [/b][b]之间的ASCII [/b][b]码值,返回值为NULL ;[/b]
[b]
Lower([/b][b]
串)[/b][b]:把字符串全部转换为小写;[/b]
例: select lower('QingPingGuo') 值为: qingpingguo
[b]
Upper([/b][b]
串) [/b][b]:把字符串全部转换为大写;[/b]
例: select upper('QingPingGuo') 值为: QINGPINGGUO
[b]
LTrim(串), RTrim(串):去掉左右空格;[/b]
例(去左空格): select '博客园'+LTrim(' 青苹果 ')+'博客园' 值为:博客园青苹果 博客园
[b]
space([/b][b]
个数[/b][b]
)[/b][b]:返回指定个数的空格;[/b]
[b]
replicate([/b][b]
串[/b][b]
,[/b][b]
次数[/b][b]
)[/b][b]:将串重复指定次数;[/b]
例: select replicate('青苹果',2) 值为:青苹果青苹果
[b]
Left([/b][b]
串[/b][b]
, [/b][b]
个数[/b][b]
)[/b][b]:返回已知串从左边开始指定个数的字符;[/b]
例: select left('青苹果在博客园', 4) 值为:青苹果在
[b]
Right([/b][b]
串[/b][b]
, [/b][b]
个数[/b][b]
)[/b][b]:返回已知串从右边开始指定个数的字符;[/b]
例: select right('青苹果在博客园', 4) 值为:在博客园
[b]
DataLength(串):返回串的字节数长度,计算串尾空格。可以用它检查varchar,text等的动态长度;[/b]
例: select datalength('青苹果在博客园') 值为:14
[b]
SubString(串, 开始位置, 长度):返回从字符串左边'开始位置'起数量为'长度'的字符串。其中表达式可以是字符串或二进制串或含字段名或字符型变量的表达式。在这里要注意一下SUBSTRING()函数不能用于TEXT 和IMAGE 数据类型;[/b]
例: select substring('青苹果在博客园',5,2) 值为:博客
[b]
Len(串) :返回表达式的长度。注意它返回的是字符数,而不是字节数。不计算串尾空格;[/b]
例: select len('青苹果cnblogs ') 值为:10
[b]
Replace('[/b][b]
串[/b][b]
1','[/b][b]
串[/b][b]
2','[/b][b]
串[/b][b]
3')[/b][b]:用串[/b][b]3[/b][b]替换串[/b][b]1[/b][b]中出现的所有串[/b][b]2[/b][b]字符;[/b]
例: select replace('青苹果在北京','北京','博客园') 值为:青苹果在博客园
[b]
Stuff([/b][b]
串1, [/b][b]
开始位置, [/b][b]
长度, [/b][b]
串2)[/b][b]:删除串1[/b][b]指定位置开始指定长度的字符串,并在指定位置插入串2;[/b]
例: select stuff('青苹果是程序猿吗?',5,3,'攻城狮') 值为:青苹果是攻城狮吗?
[b]
reverse([/b][b]
串) [/b][b]:将指定的字符串的字符排列顺序颠倒;[/b]
例: select reverse('12345') 值为:54321
[b]
charindex([/b][b]
串1[/b][b]
,串2)[/b][b]:返回串1[/b][b]在串2[/b][b]的开始位置,可从所给出的‘[/b][b]开始位置'[/b][b]进行查找;[/b]
例: select charindex('guo','qingpingguo') 值为:9
[b]转换函数[/b]
[b]所谓转换函数就是把某种数据类型转换的表达式显示转换成另一种数据类型的函数。[/b]
[b]
CAST([/b][b]
表达式 AS [/b][b]
数据类型[([/b][b]
长度)])[/b]
例: select '今天是:' + Cast(GetDate() as char(10)) 值为:今天是:07 23 2012
[b]
CONVERT([/b][b]
转换后的目标数据类型[(length)],[/b][b]
表达式[style])[/b]
例: select '今天是:' +convert(char(10),getdate()) 值为:今天是:07 23 2012
[b]下面来看一个求差值的函数[/b][b]datediff[/b][b]函数;[/b]
[b]
DATEDIFF(datepart,date1,date2)[/b]
例: select datediff(yy,'1988.09.14','2012.12.21') 值为:24 select datediff(mm,'1988.09.14','2012.12.21') 值为:291
[b]聚合函数[/b]
[b]聚合函数也就是统计函数,它主要是对一组值进行计算,它的功能分别是:求和(sum)[/b][b]、求最小(min)[/b][b]、求最大(max)[/b][b]、求总行数(count)[/b][b]、求平均值(avg)[/b]
例: 求和:select sum(Name) from TableName 求最小:select min(Name) from TableName 求最大:select max(Name) from TableName 求总数:select count(Name) from TableName 求平均:select avg(Name) from TableName
[b]T-SQL[/b][b]的一些关键字[/b]
[b]Print[/b] [b]向客户端返回用户信息[/b]
例: print '青苹果' 屏幕上就会显示“青苹果三个字“
[b]
Go [/b] [b]用来通知SQL[/b][b]一批语句的结束[/b]
[b]
Distinct[/b] [b]去[/b][b]掉重复值[/b]
[b]
Declare [/b] [b]用来声明变量[/b]
[b]
Set [/b] [b]为变量赋值[/b]
[b]
While[/b] [b]在SQL[/b][b]中用来循环([/b][b]好像在SQL[/b][b]中用来做循环的关键字不多)[/b]
语法: WHILE <条件表达式> BEGIN <命令行或程序块> [BREAK] [CONTINUE] [命令行或程序块] END
While比较重要,我们来做个例子加深一下对While循环的理解:
declare @a intset @a=1while @a<5begin print '青苹果'set @a=@a+1end
输出结果:青苹果
青苹果
青苹果
青苹果
[b]
if else [/b] [b]判断语句[/b]
判断语句用的还是比较多的我们还是来做个例子说明一下;
求:a、b、c三个数的最大值?
declare @a int,@b int,@c int,@max intset @a=1 set @b=2 set @c=3 if @a>@b set @max=@aelse set @max=@bif @max<@c set @max=@c print @max
输出结果:3
[b]
begin end[/b] [b]用来设定一个程序块,将在BEGIN…END[/b][b]内的所有程序视为一个单元执行。[/b]
[b]
Exists[/b] [b]判断是否存在[/b]
[b]Case[/b] [b]也是用来判断的,和IF[/b][b]语句差不多,它的格式为:[/b]
CASE <运算式> WHEN <运算式1> THEN <结果1> … WHEN<运算式n> THEN <结果n> [ELSE <结果n+1>] END
[b]Return[/b] [b]用于结束当前程序的执行,返回到上一个调用它的程序或其它程序。在括号内可指定一个返回值。[/b]
[b]Goto标示符[/b] [b]用来改变程序执行的流程,使程序跳到标有标识符的指定的程序行再继续往下执行。要注意的是作为跳转目标的标识符可为数字与字符的组合,但必须以“[/b][b]:”[/b][b]结尾,如:“1023[/b][b]:” “qingpingguo:”[/b]
例子: declare @a int set @a = 1 qingpignguo: print @a set @a = @a + 1 while @a < 6 goto qingpignguo
输出结果:12345
最后一个给大家看个好玩的:
[b]
Waitfor[/b] [b]用来暂停程序执行,直到等待指定时间之后,或所设定的时间已到才继续往下运行程序。[/b]
语法: waitfor {delay '时间'|time '时间'}
[b]解释:[/b]
[b](1[/b][b])‘时间'必须为DATETIME[/b][b]类型数据,且不能包括日期,如‘10:12:05'[/b]
[b](2[/b][b])DELAY:[/b][b]用来设定等待的时间长短,最多为24[/b][b]小时。([/b][b]是一个时间间隔)[/b]
[b]([/b][b]3[/b][b])TIME[/b][b]:用来设定等待结束的时间点(是一个具体的时间)[/b]
例子: waitfor delay '00:00:03' print '你好,我是青苹果' go
以上就是T-SQL的所有内容了,接下来我们来利用最后的时间画几个图形:
直角三角形:
declare @a int set @a=1while(@a<11)beginprint replace(space(@a),' ','*')set @a=@a+1end
直角三角形 输出结果:[img]http://files.jb51.net/file_images/article/201207/201207270833144.jpg[/img]
[b]正方形:[/b]
declare @a intdeclare @b intdeclare @c nvarchar(100)set @a=1set @b=1set @c=''while (@a<9)begin while (@b<15) begin set @c=@c+'*' set @b=@b+1 end print @c set @a=@a+1end
正方形 输出结果:[img]http://files.jb51.net/file_images/article/201207/201207270833145.jpg[/img]
[b]菱形:[/b]
declare @a int,@b intset @a=1 set @b=15if(@b%2!=1)print '数字必须都是奇数'elsewhile(@a<=@b)beginif(@a%2=1)print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)set @a=@a+1endset @a=@a-2while (@a<=@b)beginif(@a%2=1)print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)set @a=@a-1 if (@a<0)breakend
菱形 输出结果:[img]http://files.jb51.net/file_images/article/201207/201207270833143.jpg[/img]
[b]梯形:[/b]
declare @a int,@b intset @a=7 set @b=21if(@a%2=1)while(@a<@b)beginprint space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)set @a=@a+2end
梯形 输出结果:[img]http://files.jb51.net/file_images/article/201207/201207270833148.jpg[/img]
[b]矩形:[/b]
declare @a intdeclare @b intdeclare @c nvarchar(100)set @a=1set @b=1set @c=''while (@a<9)begin while (@b<23) begin set @c=@c+'*' set @b=@b+1 end print @c set @a=@a+1end
矩形 输出结果:[img]http://files.jb51.net/file_images/article/201207/201207270833147.jpg[/img]
[b]圆形:[/b]
declare @a int,@b intset @a=9 set @b=13while (@a<=@b)beginif(@a%2=1)print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)set @a=@a+1endset @a=@a-1beginprint space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)endwhile (@a<=@b)beginif(@a%2=1)print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)set @a=@a-1if(@a<10)breakendset @a=@a-2beginprint space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)end
圆形输出结果:[img]http://files.jb51.net/file_images/article/201207/201207270833146.jpg[/img]
The End! 以上就是本文的所有内容,可能写的不够全面,有不足的地方希望大家多多补充,多多发表意见!谢谢!
作者:青苹果