标量函数
性能设计在查询设计中所占的比重有多大,它在数据库模式设计中所占的比重就有多大,
设计时应当按照where 条件中查找数据的方式,而不是查询时使用函数操作数据的方式,来规划
数据存储,虽然在结果列中的表达式里使用函数可能是不可避免的,但在where条件中使用函数
将会强制对每一行记录都用函数进行计算。
1。服务器环境信息:
GetDate() 以3个毫秒的精度返回当前的服务器日期和时间
Db_name() 返回当前数据库的名字
例:
select getdate() as 'date', DB_name() as 'datebase'
返回:
date datebase
------------------------------------------------------------------------
2008-10-14 22:10:39.857 F21
例:
select user_name() as 'user', --返回当前用户的数据库的用户名
suser_sname() as 'login', --返回用户使用的登录名,如果用户是作为windows方式登录将返回windows用户名
host_name() as 'workstation', --返回用户工作组的名称
app_name() as 'application' --返回当前连接到SQL的应用程序名称
返回:
user login workstation application
---------------------------------------------------------------------------------------
dbo YY/Administrator YY SQL 查询分析器
2。日期时间函数
日 期 部 分 缩 写
year yy,yyyy
quarter qq,q
month mm,m
dayofyear dy,y
day dd,d
week wk,ww
weekday dw
hour hh
minute mi,n
second ss,s
millisecond ms
DateName:返回datetime值中指定日期部份的字符串值
例:select datename(year,getdate()) as year,
datename(month,getdate()) as month,
datename(day,getdate()) as day
返回:
year month day
---------------------------------
2008 10 14
Date Part:返回datetime值的指定日期部份的整数值
select datepart(dayofyear,getdate()) as '第几天', ---返回一年中的第几天
datepart(dw,getdate()) as '周几' ---返回星期几
返回:
第几天 周几
------------------------
288 3
对日期时间数据进行加、减运算使用 dateAdd() dateDiff()
例:
select datediff(yy,'1984/5/20',getdate()) as years, --返回1984/5/20距今天多少年
datediff(dd,'1984/5/20',getdate()) as days --返回1984/5/20距今天多少天
返回:
years days
----------------------
24 8913
以下例句查出当前时间100小时后的时间
例: select dateadd(hh,100,getdate()) as '100小时后'
返回:
100小时后
-------------------------------------------
2008-10-19 03:10:05.170
3.字符串函数
SubString()返回字符串中指定的部分
例: select substring('abcdefg',3,2) ---3 代表从第3个字符开始返回,2代表返回的长度为2位
返回: cd
Stuff()函数将一个字符串插入另一个字符串,在插入新字符串时将原来的字符串中删除指定长度的字符
例:
select stuff('123456789',4,0,'-') as 'A', --4代表从第4个字符开始插入,0代表删除位数为0, - 代表插入的内容
stuff('123456789',4,1,'-') as 'B' --4代表从第4个字符开始插入,1代表删除位数为0, - 代表插入的内容
返回:
A B
----------------------------------------
123-456789 123-56789
Patindex()查找指定字符第一次出现的位置
例: select patindex('%[cd]%','abcdefg') --查找[cd]第一次出现的位置
返回: 3
例:
select left('abcdefg',2) as '左', --left()返回指定字符串从左边开始的2位字符
right('abcdefg',3) as '右' --right()返回指定字符串从右边开始的3位字符
返回:
左 右
----------------------
ab efg
例:
select len('ABCDEFGHIJK') as '长度' --len()返回指定字符串的长度
返回: 11
Rtrim()删除尾随的空格,Ltrim()删除起始的空格
例:
select Rtrim(' middle earth ') as '结尾',
Ltrim(' middle earth ') as '开始'
返回:
结尾 开始
---------------------------------------------
middle earth middle earth
将字符串转为大写或者小写
小写字母是在9世纪为了方便书写而首交提出来的,随着15世纪印刷机的
发明,出现了'Upper()'和'Ltrim()'这样两个术语
例: select upper('one TWO tHrEe') as '大写',
lower('one TWO tHrEe') as '小写'
返回:
大写 小写
---------------------------------------------------
ONE TWO THREE one two three
4.类型转换
进行数据类型转换需要使用函数 cast() 和 convert()
例: select cast('Away' as nvarchar(5)) as '转换'
返回: Away
例:
select getdate() as '当前时间',
convert(nvarchar(25),getdate(),100) as '类型100', --100指返回时间的一种格式
convert(nvarchar(25),getdate(),1) as '类型1', --1指返回时间的一种格式
convert(nvarchar(25),getdate(),121) as 'ODBC型' --121指返回ODBC时间的格式
返回:
当前时间 类型100 类型1 ODBC型
--------------------------------------------------------------------------------------------------------------------------
2008-10-21 21:48:44.547 10 21 2008 9:48PM 10/21/08 2008-10-21 21:48:44.547
样 式 描 述 格 式
0/100* 默认 mon dd yyy hh:mi AM
1/101 美国 mm/dd/yy
2/102 ANSI yy.mm.dd
3/103 英国/法国 dd/mm/yy
4/104 德国 dd.mm.yy
5/105 意大利 dd-mm-yy
6/106 dd mon yy
7/107 mon dd,yy
8/108 hh:mm:ss
9/109* 默认值+毫秒 mon dd yyyy hh:mi:ss:mmm AM
10/110 美国 mm-dd-yy
11/111 日本 yy/mm/dd
12/112 ISO yymmdd
13/113* 欧洲默认值+毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14/114 hh:mi:ss:mmm(24h)
20/120* ODBC规范 yyyy-mm-dd hh:mm:ss(24h)
21/121* ODBC规范(带毫秒) yyyy-mm-dd hh:mm:ss.mmm(24h)
Str()函数将数据在字符与数字类型之间转换
例:
第一位参数为指定要转换的字符
第二位参数为指定要转换的长度
第三位参数为小数位数(包含小数点)