Bootstrap

mysql的常用内置函数

目录

字符串函数:

数值函数:

日期和时间函数:

流程控制函数:


字符串函数:


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;

;