目录
字符串函数:
CONCAT(s1,s2,s3....):用于将多个字符串连接成一个字符串。
示例:
SELECT CONCAT('Hello', ' ', 'World'); 会返回 Hello World。
SUBSTRING(str, start, length):从字符串 str 中提取子字符串,start 表示起始位置,length 表示要提取的长度(可选)。
示例:
SELECT SUBSTRING('HelloWorld', 6, 5); 会返回 World。
LENGTH(str):返回字符串 str 的长度。
示例:
SELECT LENGTH('Hello'); 会返回 5。
UPPER (str) 和 LOWER (str):UPPER 函数将字符串转换为大写,LOWER 函数将字符串转换为小写。
示例:
SELECT UPPER('hello'); 会返回 HELLO;SELECT LOWER('WORLD'); 会返回 world。
TRIM(str):去除字符串 str 两端的空格。
示例:
SELECT TRIM(' Hello '); 会返回 Hello。
LPAD(str, len, padstr):用于在字符串 str 的左侧(即开头)填充指定的字符串 padstr,直到字符串的总长度达到 len。如果 str 的长度本身已经大于或等于 len,则直接返回 str 的前 len 个字符。
RPAD(str, len, padstr):与 LPAD 类似,不过是在字符串 str 的右侧(即末尾)填充指定的字符串 padstr,直到字符串的总长度达到 len。同样,如果 str 的长度本身已经大于或等于 len,则直接返回 str 的前 len 个字符。
数值函数:
ABS(x):返回数值 x 的绝对值。
示例:
SELECT ABS(-5); 会返回 5。
ROUND(x, d):对数值 x 进行四舍五入,d 表示保留的小数位数(可选,默认值为 0)。
示例:
SELECT ROUND(3.14159, 2); 会返回 3.14。
CEIL (x) 和 FLOOR (x):CEIL 函数返回大于或等于 x 的最小整数,FLOOR 函数返回小于或等于 x 的最大整数。
示例:
SELECT CEIL(3.2); 会返回 4;SELECT FLOOR(3.8); 会返回 3。
MOD(x, y):返回 x 除以 y 的余数。
示例:
SELECT MOD(10, 3); 会返回 1。
RAND() 函数有两种使用形式:
-RAND():不指定参数时,每次调用该函数会生成一个范围在 0 到 1 之间(包含 0,但不包含 1)的随机浮点数。例如,SELECT RAND(); 可能会返回类似 0.123456 这样的结果。
-RAND(N):指定参数 N 时,N 是一个整数,作为随机数生成的种子。使用相同的种子会生成相同的随机数序列。例如,SELECT RAND(1); 每次执行时,如果种子 1 不变,都会生成相同的随机数。
日期和时间函数:
CURDATE () 和 CURTIME ():CURDATE 函数返回当前日期,CURTIME 函数返回当前时间。
示例:
SELECT CURDATE(); 会返回当前日期,如 2024 - 01 - 01;SELECT CURTIME(); 会返回当前时间,如 12:30:00。
NOW():返回当前日期和时间。
示例:
SELECT NOW(); 会返回类似 2024 - 01 - 01 12:30:00 的结果。
DATE_FORMAT(date, format):将日期 date 按照指定的格式 format 进行格式化。
示例:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); 会返回当前日期,格式为 2024 - 01 - 01。
DATEDIFF(date1, date2):返回两个日期之间的天数差。
示例:
SELECT DATEDIFF('2024-01-05', '2024-01-01'); 会返回 4。
YEAR(date):从日期或日期时间值中提取年份。
示例:
SELECT YEAR('2024 - 11 - 15');
MONTH(date):从日期或日期时间值中提取月份。
示例:
SELECT MONTH('2024 - 11 - 15');
DAY(date):从日期或日期时间值中提取日。
示例:
SELECT DAY('2024 - 11 - 15');
同理还有hour,minute,second
DATE_ADD(date, INTERVAL value unit):在指定日期上加上一个时间间隔。
示例:
SELECT DATE_ADD('2024 - 11 - 15', INTERVAL 5 DAY);
DATE_SUB(date, INTERVAL value unit):功能:在指定日期上减去一个时间间隔。
示例:
SELECT DATE_SUB('2024 - 11 - 20', INTERVAL 5 DAY);
WEEKDAY(date):返回日期对应的星期几,0 表示星期一,1 表示星期二,以此类推,6 表示星期日。
示例:
SELECT WEEKDAY('2024 - 11 - 15');
DAYNAME(date):返回日期对应的星期几的英文名称。
示例:
SELECT DAYNAME('2024 - 11 - 15');
流程控制函数:
IF 函数
语法:IF(condition, value_if_true, value_if_false)
功能:对 condition 条件进行判断,如果 condition 为真(即结果为非零值),则返回 value_if_true;如果 condition 为假(结果为零值或 NULL),则返回 value_if_false。
示例:假设有一个 students 表,包含 score 列,我们可以使用 IF 函数判断学生成绩是否及格。
SELECT
student_id,
score,
IF(score >= 60, '及格', '不及格') AS result
FROM
students;
IFNULL 函数
语法:IFNULL(value1, value2)
功能:判断 value1 是否为 NULL,如果 value1 为 NULL,则返回 value2;如果 value1 不为 NULL,则返回 value1 本身。
示例:
SELECT
employee_id,
salary,
IFNULL(commission, 0) AS commission
FROM
employees;
NULLIF 函数
语法:NULLIF(value1, value2)
功能:比较 value1 和 value2,如果它们相等,则返回 NULL;如果不相等,则返回 value1。
示例:假设有一个 products 表,包含 original_price 和 discounted_price 列,我们可以使用 NULLIF 函数在原价和折扣价相等时返回 NULL。
SELECT
product_id,
original_price,
discounted_price,
NULLIF(original_price, discounted_price) AS price_difference
FROM
products;
CASE 函数
简单 CASE 表达式
语法:
CASE value
WHEN compare_value1 THEN result1
WHEN compare_value2 THEN result2
...
ELSE default_result
END
功能:将 value 依次与每个 compare_value 进行比较,如果相等,则返回对应的 result;如果所有比较都不相等,则返回 default_result。
示例:假设有一个 orders 表,包含 order_status 列,我们可以使用简单 CASE 表达式将订单状态代码转换为具体的状态描述。
SELECT
order_id,
order_status,
CASE order_status
WHEN 'P' THEN '已处理'
WHEN 'S' THEN '已发货'
WHEN 'C' THEN '已取消'
ELSE '未知状态'
END AS status_description
FROM
orders;
搜索 CASE 表达式
语法:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
功能:依次对每个 condition 进行判断,如果某个 condition 为真,则返回对应的 result;如果所有条件都为假,则返回 default_result。
示例:假设有一个 employees 表,包含 salary 列,我们可以使用搜索 CASE 表达式根据员工的工资范围进行分类。
SELECT
employee_id,
salary,
CASE
WHEN salary < 5000 THEN '低工资'
WHEN salary >= 5000 AND salary < 10000 THEN '中等工资'
ELSE '高工资'
END AS salary_category
FROM
employees;