新列名永远不用单引号
1)使用As子句可改变结果集列的名称(同上),as 可省略。
2)使用As子句可将表达式或列明的组合指定为新的查询显示
列名
如: select firstname+’.’+lastname as 姓名
from Employees
特别注意:上例中使用了“+”(符号连接符)连接两个列名,然
后用as生成新列名,这里加号两端数据类型须一致。
如果是字符类型的两串连接,只要都是字符大类的就
行,不必完全相同,可包括:char,varchar,nvarchar
3)使用等号“=”改变列名(效果同AS)
如: select 姓名= firstname+’-‘+lastname
from Employees
6$ 查询空行:在where后用“is null”或“is not null”判断是否是空行(略)
7$ 在查询中使用常量列
即在查询输出中将某一列的所有值设定为常量信息
如: select 姓名=sname,地址=address,‘河北新龙’as 学校名称
上例查询结果中的新列名“学校名称”下的所有值都为“河北新龙”
8$ 限制查询返回的行数
1.。使用top关键字限制返回行数
如:从Students表中查询性别为女的前5名学生的姓名和地址
select top 5 sname, saddress from Students where ssex=0
再如:查询Students表中包含所有列的前三行
select top 3 * from Students
特别注意:top+显示行数 后面必须有列名,如没有也必须加上*
2.。使用percent关键字限制返回的行数
返回表中符合where查询条件的记录行数中的percent%行
如: 查询Students表中女学生姓名和地址,只要20%的数据行
select top 20 percent sname, saddress from Students where ssex=0
???????????percent必须与top一起使用吗?????????
如果没有top是自上而下选取还是随机选取呢???????
答案:
自上而下
特别注意:percent%的计算结果只要有小数位就必须加一
如:20%的记录是2.4行,则查询结果显示3行
3¥ 给查询结果排序(使用order by子句,略)
特别注意:order by 子句后面可以按照多个字段排序,其结果是按照书写
顺序进行相应的优先排序。
如:在学员成绩排序的基础上再按照课程ID进行排序
select Student id as 学员编号,Score as 成绩
from Score
where Score>60
order by Score,Courseid
4¥ 在查询中使用函数
特别注意:所有函数使用时,前面必须有select,否则没用
1$ 字符串函数
特别注意:SQL Server中的字符串中的字符位从1开始计算
1.。 CharIndex(定位指定字符串在另一字符串中的起始位置)
select CharIndex(指定字符串,被查找字符串,[开始查找的起始位])
1)查找起始位置如是负数或0或没有,都从头(位置1)开始查找
2)如从起始位置开始到末尾都没有查到,返回值为0
如:Select CharIndex(‘ACCP’,’My Accp Course’,1) 返回4
2.。Len(返回字符串参数的长度)
select Len(字符串参数)
统计方式中,汉字与英文字母一样,只占一个字符为
如:select Len(‘SQL Server课程’)
返回值为12
3.。Upper(把字符串参数中的所有字符转换为大写)
如:select Upper(‘sql server课程’)
返回:SQL SERVER课程
转换为小写使用Lower,形如:select Lower(字符串参数)
4.。Rtrim(清楚字符右边的空格,左边的空格保留)
如: select Rtrim ‘ 周智勇 ’
返回:’ 周智勇’(右边的空格被清除了)
去掉字符串左右两边的空格(嵌套使用Rtrim和Ltrim)
如: string A = ‘ aaa ‘
select Ltrim(Rtrim(A))
返回:’aaa’ (先去了右边的,其结果作为新参数再去左边)
5.。Right(Left):从字符串右(左)边截取指定数目的字符
用法: select Right(被查字符串,返回的字符数)
说明: 左截取相当于指定字符数的掐头,
右截取相当于指定字符数的截尾。
如: select Right(‘买卖提。土尔松’,3)
返回:土尔松
6.。Replace(替换一个字符串中的字符)
用法: select Replace(被查字符串,要被替换的字符,替换字符)
如: select Replace(‘莫乐可切。杨可’,’可’,’兰’)
返回:莫乐兰切。杨兰
7.。Stuff(在字符串中,从指定位置(包含该位置) 开始删除指定
长度字符,并在从该位置开始插入一个新的字符串)
如: select Stuff(‘abcdefg’,2,3,’我的音乐我的世界’)
返回:(从第2位开始删除3个字符,插入后串)
‘a我的音乐我的世界efg’
8.。Substring(从字符串指定位置(含该位置)截取指定长度的子串
用法:select Substring(被截取的字符串,截取开始位置,截取长度)
如:select Substring(‘阜成门北大青鸟’,3,3)
返回:’门北大’
1)截取开始位置如为0或负数,则返回位置>o的所有字符(即
全部原字符串)
2)截取开始位置值如大于原字符串长度,则返回长度为0的字
符串即‘’(注意返回的仍是字符串“”,不是0)
3)如没有截取长度,则返回从截取开始位置到尾的全部字符
2$ 日期函数
特别注意1:不能直接对日期运用数学函数 形如:“当前日期+1”
系统无法判断年月日到底加哪一个。
特别注意2:日期的理解格式为:月 / 日 / 年
特别注意3:查询语句中,括号里的日期数据须带有单引号,‘’
特别注意4:重要实例 2)where后不能简单的跟age,
因为新建的别名不能用于条件语句和再次查询。
1.。GetDate(取得当前的系统日期) select GetDate()
2.。DateAdd(返回:依据返回参数不同,将指定的数值加到指定日
期上后的日期值)
用法:select DateAdd(返回类型参数,添加值,指定的原日期)
如:select DateAdd(mm,4,’01/01/99’)
返回:05/01/99
1)括号里的日期数据需带有单引号,‘’
2)返回类型参数: mm 返回值在月上加
yy 返回值在年上加
dd 返回值在天上加
3.。DateDiff(两个日期之间的指定日期部分的整数差值)
用法: select DateDiff(返回类型参数,前日期,后日期)
如:select DateDiff(mm,’01/01/99’,’05/01/99’)
返回:(后日期减去前日期的四则运算值) 4
1)返回值可以是:正数 后日期晚于前日期
负数 后日期早于前日期
0 后日期等于前日期
2)返回类型参数: mm 返回月的整数差值
yy 返回年的整数差值
dd 返回天的整数差值
3)如果两个日期是跨年度的,系统自动计算年度中包含的全部
返回类型参数量。
如:select datediff(dd,'02/01/1999','09/01/2000')
返回:578
自动包含了一个整年365天
再如:select datediff(mm,'02/01/1999','09/01/2000')
返回:19
自动包含了一个12个月
4.。DateName(返回日期值中,指定日期部分的字符串形式)
用法: select DateName(返回类型参数, 被查的日期值)
如:select DateName(dw,’01/01/2000’)
返回:Saturday(中文系统显示 星期六)
返回类型参数: dy或y 当年的第几天
dd或d 当月的第几天
wk或ww 当年的第几个星期
dw 按工作日计算的星期几
yy或yyyy 当年的年份值
qq或q 当年的第几季度
mm或m 日期当中的月份值
请注意:虽然返回值看似都是整数,但是他们都是字符串形式。
5.。DatePart(返回日期中指定日期部分的整数形式)
用法: select DatePart(返回类型参数,被查的日期值)
如: select DatePart(day,’01/15/2000’)
返回:15
返回类型参数: dy或y 当年的第几天
dd或d 当月的第几天
wk或ww 当年的第几个星期
dw 按工作日计算的星期几
yy或yyyy 当年的年份值
qq或q 当年的第几季度
mm或m 日期当中的月份值
DateName和DatePart小结:除了返回值数据类型不同,完全相同
6.。返回日期之中的部分日期信息的函数(返回值为整数)
整数形式,返回当前日期的年份: select year(getdate())
整数形式,返回当前日期的月份: select month(getdate())
整数形式,返回当前日期是几号: select day(getdate())
7.。重要实例
1)将表中设置为时间/日期型数据的列中的值去掉00:00:00
设某时间日期型字段名为d:
select datename(yy,d)+‘-’+datename(mm,d)+‘-’
+datename(dd,d)
2)查询18岁以上的学生信息
select name,datediff(yy,birthday,getdate()) as age
from t
where datediff(yy,birthday,getdae())>18
3)查询和BB同年出生的学生信息(重复查询)
select * from t
where year(birthday)=(select year(birthday) from t
where name=’BB’ )
and name<>’BB’
特别注意:2)例中where后不能简单的跟age,
select name,datediff(yy,birthday,getdate()) as age
from t
where age>18
因为新建的别名
不能用于条件语句和再次查询。
3$ 数字函数
1.。Abs(取数值表达式的绝对值) select Abs(-43) 返回:43
2.。Ceiling(取大于或等于指定数值,表达式最小的整数)
select Ceiling(43.5) 返回:44 (注意不是四舍五入)
即:天花板数查询
3.。Floor(取小于或等于表达式的最大整数值)
select Floor(43.5) 返回:43 (注意不是四舍五入)
即:地板数查询
4.。Power(取数值表达式的幂值)
select Power(5,2) 返回:25
5.。Round(将数值表达式四舍五入为指定精度)
select Round(43.543, 1) 返回:43.5
6.。Sign(对于正数返回+1,对于负数返回-1,0返回0)
select sign(-43) 返回:-1
7.。Sqrt(取浮点表达式的平方根)
select sqrt(9) 返回:3 (返回值也是浮点式的)
8.。Rand(返回介于 0 和 1 之间的随机 float 值)
用法: Rand(数字种子)
说明: 数字种子,可以隐式转换为 int 的整数表达式,给出种子
或起始值
重要实例:产生4位随机整数
Convert(varchar(4),
select right(rand(datepart(ms,getdate())*1000),4))
说明:datepart(ms,getdate())à取当前时间的毫秒数
以此为基础产生0~1之间的多位随机小数,再乘以1000
然后去最右4位,最后转换为字符串类型。
详见P148页
4$ 系统函数
1.。Convert(用来转换数据类型)
用法:select convert(转换后的数据类型,被转换的数据)
如:select convert(varchar(5),12345) 返回:’12345’
转换后的数据可以是任何类型,只需逻辑正确。
如: stringàdatetime
stringàint
2.。Current_user(返回本数据库文件安全性中的用户名)
3.。DataLength(返回用于指定表达式的字节数—汉字占个两个字节)
如: select DataLength(’中国A联盟’) 返回:9
对比:select Len('中国A联盟’) 返回:5
4.。Host_Name(返回当前用户所登录的计算机名—计算机名)
5.。System_User(返回当天登录的用户名称—SQL登录名)
6.。User_Name(从给定的用户ID返回用户名)?????
如: select user_name(1) 返回:从任意数据库中返回“dbo”
(2) 返回:guest
其他参数:详见参数