函数
算术函数
1. 四则运算: +、-、*、/?
2. ABS:求绝对值, ABS(数值)
3. MOD: 求余,MOD(被除数,除数)
4. ROUND:四舍五入,ROUND(对象数值,保留小数的位数)
字符串函数
1. 字符串拼接: ||, str1 || str2 || str3 || … || strn ?AS str_all
2. 字符串长度:LENGTH,LENGTH(str1) AS len_str1
3. 小写转换:LOWER,LOWER(str1) AS low_str
4. 大写转换:UPPER,UPPER(str1) AS up_str
5. 字符串替换:REPLACE,REPLACE(替换对象, 被替换的字符串, 替换后的字符串) AS rep_str ?:如果替换对象中不含有被替换字符串,则不进行替换操作
6. 字符串截取:SUBSTRING,SUBSTRING(对象字符串 FROM 起始位置 ?FOR 截取的长度) AS sub_str
日期函数
1. CURRENT_DATE:不需要参数,直接返回当前日期,显示格式:yyyy-mm-dd
2. CURRENT_TIME:不需要参数,直接返回当前时间,显示格式:hh:mm:s
3. CURRENT_TIMESTAMP:不需要参数,同时获得日期和时间,也可以进行截取操作
4. EXTRACT:截取时间,EXTRACT(日期元素 FROM 日期)
? ? 日期元素有:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND
? ? 例如:
? ? SELECT CURRENT_TIMESTAMP?
? ? EXTRACT(YEAR ? ? ? ?FROM CURRENT_TIMESTAMP) AS year,
? ? EXTRACT(MONTH ? ? FROM CURRENT_TIMESTAMP) AS month,
? ? EXTRACT(DAY ? ? ? ? ? FROM CURRENT_TIMESTAMP) AS day,
? ? EXTRACT(HOUR ? ? ? FROM CURRENT_TIMESTAMP) AS hour,
? ? EXTRACT(MINUTE ? ?FROM CURRENT_TIMESTAMP) AS minute,
? ? EXTRACT(SECOND ? FROM CURRNR_TIMESTAMP) AS second; ??
转换函数
1. CAST( 转换前的值 AS 想要转换的数据类型 )
? ? 例如:
? ? SELECT CAST(‘0001’ AS INTEGER ) AS int_col; ? ? ? ?SQL Server/ PostgreSQL
? ? SELECT CAST(‘0001’ AS SIGNED INTEGER) AS int_col; ? ? MySQL
? ? SELECT CAST(‘0001’ AS INTEGER) AS int_col ?FROM DUAL; ? ?Oracle
? ? SELECT CAST(‘0001’ AS INTEGER) AS int_col FROM SYSIBM.SYSDUMMY1; ? DB2
? ? 结果:
? ? int_col
? ? —————
? ? ? ? ? ? ?1
2. ?COALESCE(数据1,数据2,数据3 ……) 返回左侧开始第一个不是NULL的值
谓词
LIKE
like谓词用于查询字符串部分一致,类似于简化版正则表达式,其中%表示匹配任意字符任意格式,_表示匹配一个任意字符串
例如:
查询SampleLike表中,strcol列字符串中间含有ddd的行
SELECT *
FROM SampleLike
WHERE strcol LIKE ‘%ddd%‘
其他类似于:’%ddd’ ,’ddd%’ , ‘_ddd’ 等简单模式的匹配
BETWEEN
相当于 ?>= AND <=,例如:
SELECT shohin_mei, hanbai_tanka
FROM Shohin
WHERE hanbai_tanka BETWEEN 100 AND 1000
IS NULL 、 IS NOT NULL
用于判断是否为NULL值
?IN
将多个OR条件合并,如:
SELECT shohin_mei, shiire_tanka
FROM Shohin
WHERE shiire_tanka NOT IN (320, 500, 5000)
注意:IN和NOT IN无法选取NULL值,NULL的判断只能用IS NULL 和IS NOT NULL
配合子查询中返回多个值,可以灵活使用IN谓词来做选择
如:
SELECT shohin_mei, hanbai_tanka
FROM Shohin
WHERE shohin_id IN (SELECT shohin_id
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?FROM TenpoShohin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WHERE tenpo_id = ‘000C‘)?
EXIST
EXIST谓词用于判断是否存在满足某种条件的记录,多用于在子查询中替换IN达到相同目的的操作,如:
SELECT shohin_mei, hanbai_tanka
FROM Shohin AS S
WHERE EXISTS ( SELECT *
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?FROM TenpoShohin AS TS
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WHERE TS.tenpo_id = ‘000C’
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?AND TS.shohin_id = S.shohin_id)
ps. 个人感觉还是IN比较直观易用一些
CASE表达式
相当于switch语句,语法为:
CASE <表达式>
? ? WHEN <表达式> ?THEN <表达式>
? ? WHEN <表达式> ?THEN <表达式>
? ? ? ? ? ? ? ? ? ? ? ...
? ? ELSE <表达式>
END
每一个WHEN 、THEN组合相当于switch中的一个case,最后的ELSE相当于default;
CASE表达式常和SELECT结合:
SELECT <列>,
? ? CASE WHEN?<表达式> ?THEN <表达式>
? ? ? ? ? ? ???WHEN?<表达式> ?THEN <表达式>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?…
? ? ? ? ? ? ? ?ELSE NULL
? ? END AS <名称>
FROM <表>;
?