7. 内置函数
7.1. 标量函数
? 系统函数
1、 Case
常用CASE用法
SELECT Title,'Price Range' =
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
FROM titles ORDER BY price
CASE语句在GROUP BY使用
SELECT 'Number of Titles', Count(*)
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
CASE语句在ORDER BY 使用
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range, Title
FROM titles
GROUP BY
CASE WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END, Title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END, Title
注:为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。
2、 判断数据类型函数
ISDATE(expression) -- 是否是合法日期函数
ISNUMERIC(expression) -- 是否是合法数字
DATALENGTH(expression) -- 返回字段的字节数
3、 处理空值函数
NULLIF(expression,expression)
如果函数的两个表达式相等,返回空值,如果不等返回第一个表达式的值,通常在统计平均值时非常有用。
ISNULL(check_expression,replacement_value) --当列值为空时,用其他数字代替
SELECT ISNULL(STATE_ID,0) FROM SETTLE_ENTER_RECORD
COALESCE(expression)
4、 转换函数
CONVERT(data_type,expression,[style])
SELECT CONVERT(varchar,ENTER_TIME) as dateTime FROM SETTLE_ENTER_RECORD
CAST(express AS data_type)
SELECT CAST(ENTER_TIME AS datetime) as dateTime FROM SETTLE_ENTER_RECORD
注:CONVERT()和CAST()区别在于CONVERT()函数允许指定返回结果的格式。
在不使用格式化功能时推荐使用CAST()函数,因为他是SQL92标准函数
? 日期/时间函数
1、 获取系统时间
GETDATE() -- 返回系统时间
2、 获取部分日期/时间
DAY(date) --日期
MONTH(date) -- 月份
YEAR(date) --年
DATEPART(datepart,date) --获取部分时期
select DATEPART(yyyy,enter_time) from SETTLE_ENTER_RECORD
3、 日期/时间计算
DATEADD(datepart,number,date) -- 给指定日期添加一个间隔时间数
SELECT DATEADD(mm,10,enter_time) FROM SETTLE_ENTER_RECORD
DATEDIFF(datepart,startdate,enddate) --起始到终止日期的间隔时间
SELECT DATEDIFF(dd,enter_time,getDATE()) FROM SETTLE_ENTER_RECORD
? 字符串函数
1、 字符串长度
LEN(expression) -- 字符串长度
SELECT LEN(car_type_id) FROM SETTLE_ENTER_RECORD
2、 取子串
SUBSTRING(expression,start,length) --截取字符串
SELECT SUBSTRING(car_type_id,2,5) FROM SETTLE_ENTER_RECORD
3、 字符串位置
CHARINDEX(expression1,expression2) -- expression1在expression2的位置
SELECT CHARINDEX('2',car_type_id) FROM SETTLE_ENTER_RECORD
4、 删除空格
LTRIM(expression) --删除左边的空格
RTRIM(expression) --删除右边的空格
5、 大小写转换
UPPER(expression) --大写转换
LOWER(expression) --小写转换
6、 数值类型转换
STR(expression[,length]) -- 将数字类型转换为字符串类型
SELECT STR(car_type_id,5) FROM SETTLE_ENTER_RECORD
7、 字符类型同ASCII/UNICODE转换
CHAR(expression)
ASCII(expression)
NCHAR(expression)
UNICODE(expression)
7.2. 聚合函数
MAX(expression) --最大值
MIN(expression) --最小值
AVG(expression) --平均值
SUM(expression) --总计