所谓函数,
就是输入某一值得到相应输出结果的功能,输入值称为参数(parameter),
输出值称为返回值。
算术函数
为了学习算术函数,我们首先根据代码清单 6-1 创建一张示例用表
(SampleMath)。
由于 PostgreSQL 中的 ROUND函数只能使用 NUMERIC 类型的数据,因此我们在示例中也使用了该数据类型。
--Mysql --DDL:创建表 CREATE TABLE SampleMath (m NUMERIC (10,3), n INTEGER, p INTEGER); --DML:插入数据 START TRANSACTION; INSERT INTO SampleMath(m, n, p) VALUES (500, 0, NULL); INSERT INTO SampleMath(m, n, p) VALUES (-180, 0, NULL); INSERT INTO SampleMath(m, n, p) VALUES (NULL, NULL, NULL); INSERT INTO SampleMath(m, n, p) VALUES (NULL, 7, 3); INSERT INTO SampleMath(m, n, p) VALUES (NULL, 5, 2); INSERT INTO SampleMath(m, n, p) VALUES (NULL, 4, NULL); INSERT INTO SampleMath(m, n, p) VALUES (8, NULL, 3); INSERT INTO SampleMath(m, n, p) VALUES (2.27, 1, NULL); INSERT INTO SampleMath(m, n, p) VALUES (5.555,2, NULL); INSERT INTO SampleMath(m, n, p) VALUES (NULL, 1, NULL); INSERT INTO SampleMath(m, n, p) VALUES (8.76, NULL, NULL); COMMIT; --确认表中的内容 SELECT * FROM SampleMath;
■ ABS——绝对值
ABS 是计算绝对值的函数。 绝对值(absolute value)不考虑数值的符号,表示一个数到原点的距离。
■ MOD——求余
■ ROUND——四舍五入
字符串函数
在日常生活中,我们经常会像使用数字那样,对字符串进行替换、截
取、简化等操作,因此 SQL 也为我们提供了很多操作字符串的功能。
为了学习字符串函数,我们再来创建一张表(SampleStr),参见代码清单 6-5。
--MySQL --DDL:创建表 CREATE TABLE SampleStr (str1 VARCHAR(40), str2 VARCHAR(40), str3 VARCHAR(40)); --DML:插入数据 START TRANSACTION; INSERT INTO SampleStr (str1, str2, str3) VALUES ('opx', 'rt' , NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc' , 'def' , NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES ('山田' , '太郎' , '是我'); INSERT INTO SampleStr (str1, str2, str3) VALUES ('aaa' , NULL , NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES (NULL , 'xyz', NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES ('@!#$%', NULL , NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES ('ABC' , NULL , NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES ('aBC' , NULL , NULL); INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc太郎', 'abc' , 'ABC'); INSERT INTO SampleStr (str1, str2, str3) VALUES ('abcdefabc', 'abc' , 'ABC'); INSERT INTO SampleStr (str1, str2, str3) VALUES ('micmic', 'i', 'I'); COMMIT; --确认表中的内容 SELECT * FROM SampleStr;
■ ||——拼接
|| 函数在 SQL Server 和 MySQL 中无法使用。
■ LENGTH——字符串长度
■ LOWER——小写转换
UPPER ——大写转换
■ REPLACE——字符串的替换
■ SUBSTRING——字符串的截取
日期函数
虽然 SQL 中有很多日期函数,但是其中大部分都依存于各自的 DBMS,
因此无法统一说明 。本节将会介绍那些被标准 SQL 承认的可以应用于
绝大多数 DBMS 的函数。
■ CURRENT_DATE——当前日期
■ CURRENT_TIME——当前时间
■ CURRENT_TIMESTAMP——当前日期和时间
--PostgreSQL, MySQL 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 CURRENT_TIMESTAMP) AS second;
--Oracle 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 CURRENT_TIMESTAMP) AS second FROM DUAL;
--SQL Server SELECT CURRENT_TIMESTAMP, DATEPART(YEAR , CURRENT_TIMESTAMP) AS year, DATEPART(MONTH , CURRENT_TIMESTAMP) AS month, DATEPART(DAY , CURRENT_TIMESTAMP) AS day, DATEPART(HOUR , CURRENT_TIMESTAMP) AS hour, DATEPART(MINUTE , CURRENT_TIMESTAMP) AS minute, DATEPART(SECOND , CURRENT_TIMESTAMP) AS second;
转换函数
■ CAST——类型转换
■ COALESCE——将NULL转换为其他值