SQL Server
本章介绍的是使用SQL Server的时候,SQL语句支持的常用函数。
日期函数
Year
返回给定日期的年份。
例如统计不同年份的销售额:
SELECT Year(日期) AS 年, SUM(数量) AS 数量 FROM {订单} GROUP BY Year(日期)
Month
返回给定日期的月份
例如统计1999年各月的销售额:
SELECT Month(日期) AS 月, SUM(数量) AS 数量 FROM {订单} WHERE Year(日期) = 1999 GROUP BY Month(日期)
Day
返回指定日期的天。
DatePart
返回给定日期的指定部分。
语法
DatePart(Interval, date)
Interval: 字符型,表示希望返回的时间部分
Date: 给定的日期值
Interval 包含以下设置:
yyyy 年
q 季度
m 月
y 某年的某一天
d 天
dw 工作日
ww 周
hh 时
n 分
s 秒
例如统计每年的订单数:
SELECT DatePart(yyyy, 订购日期) AS 年, Count(*) AS 订单数 FROM {订单} GROUP BY DatePart(yyyy, 订购日期)
GetDate
返回系统日期,含时间。
例如加载今年的订单:
Select * From {订单} Where Year(订购日期) = Year(GetDate())
DateDiff
计算两个日期的间隔。
语法
DateDiff(Interval, Date1, Date2)
Interval:表示时间间隔的类型。
Date1:起始日期
Date2:结束日期
Interval 包含以下设置:
yyyy 年
q 季度
m 月
y 某年的某一天
d 天
w 工作日
ww 周
hh 时
n 分
s 秒
例如加载最近两个月内的订单:
SELECT * FROM {订单} WHERE DateDiff(m, 订购日期, GetDate()) < 2
DateAdd
为一给定的日期加上指定的时间间隔。
语法
DateAdd(Interval, Number, Date)
Interval:表示时间间隔的类型,可设置值DateDiff函数相同。
Number: 表示要加上的时间间隔数量。
Date: 日期值
例如加载未来两个月要发货的订单:
SELECT * FROM {订单} WHERE 发货日期 BETWEEN GetDate() AND DateAdd(m, 2, GetDate())
字符函数
Len
返回字符串的长度
Lower
将字符串转换为小写。
Upper
将字符串转换为大写。
SubString
返回从指定位置开始指定长度的字符串,例如:SubString('abcdefg', 2, 3) = 'bcd'
CharIndex
返回给定子字符串首次出现的位置,例如:CharIndex('b','abcdefg') = 2
Left
取左侧指定长度的字符串。
Right
取右侧指定长度的字符串。
Replace
将指定的子字符串替换为其它的字符串,例如:Replace('abcdefg','bc','45') = 'a45defg'
数学函数
Abs
返回给定数值的绝对值。
Round
将数值四舍五入到指定的小数位数。
例如:
SELECT 客户,Count(*) AS 订单数, SUM(数量) AS 数量, Round(SUM(数量 * 单价 * (1 - 折扣)), 2) AS
金额 FROM {订单} GROUP BY 客户
上述语句的金额由数量、单价、折扣计算得出,且保留两位小数。
空值处理函数
ISNULL
判定一个表达式的值是否为空,如果不为空,则返回表达式的值,否则返回一个替代值。
语法
ISNULL(expression, value)
expression:一个表达式,如果此表达式的值不为空,则返回此值。
value:
一个替代值,如果表达式的值为空,则返回此替代值。
例如:
Select 日期, 产品, 数量, 数量, 单价, ISNULL(折扣,0) As 折扣 From {订单}
上述的语句中,如果已经输入折扣,则正常显示折扣,否则折扣列显示的是0。
再次提示:0和空值是两回事,空值表示没有输入数据,而0意味着用户已经输入了一个为0的值。
COALESCE
COALESC函数可以指定任意多个参数,并返回这些参数中第一个不为空的值,如果全部为空,则返回空值。
COALESCE函数相当于ISNULL函数的增强版。
条件语句
Case When
Case When语句用于进行条件判断。
语法1
Case 表达式
When 比较值1 Then 返回值1
When 比较值2 Then 返回值2
When 比较值3 Then 返回值3
....
Else 默认返回值
End
当表达式等于比较值1时,则得到返回值1,当表达式等于比较值2时,则得到返回值2,其余类推;当比较结束,没有符合的比较值时,则得到默认返回值。
例如
Select CName As 客户名称,
(Case CLevel
When 1 Then 'VIP客户'
When 2 Then '高级客户'
When 3 Then '普通客户'
Else '错误等级'
End) As 客户等级 From {客户}
语法2
Case
When 表达式1 Then 返回值1
When 表达式2 Then 返回值2
When 表达式3 Then 返回值3
...
Else 默认返回值
End
当表达式1成立时,则得到返回值1,当表达式2成立时,则得到返回值2,其余类推;没有表达式成立时,则得到默认返回值。
例如:
Select 姓名,
(Case
When 体重 < 40 Then '偏瘦'
When 体重 > 50 Then '偏胖'
Else '适中'
End) As 体型 From {学生}