Access
本章介绍的是使用Access数据源时,SQL语句支持的常用函数。
内部数据源支持的SQL函数,和Access完全相同。
日期函数
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
返回给定日期的天
Date
返回系统日期
例如查询当天的订单:
SELECT * FROM {订单} WHERE 日期 = Date()
DatePart
返回给定日期时间的指定部分
语法
DatePart(Interval, date)
Interval: 字符型,表示希望返回的时间部分
Date: 给定的日期值
Interval 包含以下设置:
yyyy 年
q 季度
m 月
y 某年的某一天
d 天
w 工作日
ww 周
h 时
n 分
s 秒
例如统计1999年的各季度每种产品的销售数量:
SELECT 产品, DatePart('q', 日期) AS 季度, SUM(数量) AS 数量 FROM {订单} WHERE Year(日期) = 1999 GROUP BY 产品, DatePart('q', 日期)
DateDiff
计算两个给定日期的间隔。
语法
DateDiff(Interval, Date1, Date2)
Interval:表示时间间隔的类型。
Date1:起始日期
Date2:结束日期
Interval 包含以下设置:
yyyy 年
q 季度
m 月
y 某年的某一天
d 天
w 工作日
ww 周
h 时
n 分
s 秒
例如加载最近两个月内的订单:
SELECT * FROM {订单} WHERE DateDiff('m', 日期, Date()) < 2
DateAdd
为一给定的日期加上给定的时间间隔。
语法
DateAdd(Interval, Number, Date)
Interval:表示时间间隔的类型,可设置的值和DateDiff函数相同。
Number: 表示要加上的时间间隔数量。
Date: 日期值
例如加载未来两个月要发货的订单:
SELECT * FROM {订单} WHERE 发货日期 BETWEEN Date() AND DateAdd('m', 2, Date())
数学函数
Abs
返回数值的绝对值。
Int
返回数值的整数部分。
Round
将数值四舍五入到指定的小数位数。
例如:
SELECT 客户,Count(*) AS 订单数, SUM(数量) AS 数量, Round(SUM(数量 * 单价 * (1 - 折扣)), 2) AS 金额 FROM {订单} GROUP BY 客户
上述语句的金额由数量、单价、折扣计算得出,且保留两位小数。
字符函数
Len
返回字符串的长度。
Mid
返回字符串从指定位置开始指定个数的字符,例如:Mid('abcdef',2,3) = 'bcd'
InStr
返回一个字符串在另一个字符串中首次出现的位置,例如:Instr('abcd','bc') = 2
LCase
将字符串转换为小写。
UCase
将字符串转换为大写。
Left
返回字符串从左边开始指定个数的字符,例如:Left('abcd',2) = 'ab'
Right
返回字符串从右边开始指定个数的字符。
流程函数
Choose
根据一个整数表达式的结算结果,来决定返回那个位置的值
语法:
Choose(expr, value1, value2, value3...)
expr: 整数表达式,如果结果是1,则返回value1,如果结果是2,则返回value2,依次类推。
例如:choose(2,'a','b') = 'b'
Switch
按顺序计算一系列的表达式,如果某一表达式成立,则返回其随后的值。
语法:
Switch(expr1, value1, expr2, value2, expr3, value3...)
expr1、expre2、expr3:表示要计算的表达式,expr1成立的话,返回值value1,expr2成立的话,返回值value2,依次类推。
IIF
根据一个逻辑表达式的计算结果,返回两个候选值之一。
语法:
IIf(expr, truepart, falsepart)
expr: 逻辑表达式
truepart:逻辑表达式成立时返回的值
falsepart: 逻辑表达式不成立时返回的值
例如:
SELECT 客户, 产品, 日期, 数量, 数量 * 单价 * (1 - IIF(折扣 IS NULL, 0, 折扣)) As 金额 FROM {订单}
这样,即使某一行没有输入折扣,也能正常计算出金额。