SQL 函数概述

06-01 1086阅读

SQL 函数概述

SQL 函数可以分为几大类,不同数据库系统可能有略微不同的实现。以下是主要的 SQL 函数分类:

1. 聚合函数 (Aggregate Functions)

  • COUNT() - 计算行数

  • SUM() - 计算总和

  • AVG() - 计算平均值

  • MIN() - 找最小值

  • MAX() - 找最大值

  • GROUP_CONCAT() (MySQL) / STRING_AGG() (SQL Server, PostgreSQL) - 连接字符串

  • STDDEV() / STDDEV_POP() - 计算标准差

  • VARIANCE() / VAR_POP() - 计算方差

    2. 标量函数 (Scalar Functions)

    字符串函数

    • CONCAT() - 连接字符串

    • SUBSTRING() / SUBSTR() - 提取子字符串

    • TRIM() - 去除空格

    • UPPER() / UCASE() - 转为大写

    • LOWER() / LCASE() - 转为小写

    • LENGTH() / LEN() - 字符串长度

      SQL 函数概述
      (图片来源网络,侵删)
    • REPLACE() - 替换字符串

    • LEFT() / RIGHT() - 获取左/右部分字符串

      SQL 函数概述
      (图片来源网络,侵删)

      数学函数

      • ABS() - 绝对值

      • ROUND() - 四舍五入

        SQL 函数概述
        (图片来源网络,侵删)
      • CEIL() / CEILING() - 向上取整

      • FLOOR() - 向下取整

      • MOD() - 取模

      • POWER() / POW() - 幂运算

      • SQRT() - 平方根

      • RAND() - 随机数

        日期和时间函数

        • NOW() / CURRENT_TIMESTAMP - 当前日期时间

        • CURDATE() / CURRENT_DATE - 当前日期

        • CURTIME() / CURRENT_TIME - 当前时间

        • DATE() - 提取日期部分

        • TIME() - 提取时间部分

        • YEAR() / MONTH() / DAY() - 提取年/月/日

        • DATEDIFF() - 计算日期差

        • DATE_ADD() / DATE_SUB() - 日期加减

        • DAYNAME() / MONTHNAME() - 获取星期/月份名称

          转换函数

          • CAST() - 类型转换

          • CONVERT() - 类型转换

          • COALESCE() - 返回第一个非NULL值

          • NULLIF() - 两值相等返回NULL

            条件函数

            • CASE WHEN...THEN...ELSE...END - 条件表达式

            • IF() (MySQL) - 简单条件判断

            • IIF() (SQL Server) - 简单条件判断

            • DECODE() (Oracle) - 值匹配判断

              3. 窗口函数 (Window Functions)

              • ROW_NUMBER() - 行号

              • RANK() - 排名(有间隔)

              • DENSE_RANK() - 排名(无间隔)

              • NTILE() - 分组排名

              • LEAD() / LAG() - 访问前后行数据

              • FIRST_VALUE() / LAST_VALUE() - 窗口首/尾值

              • PERCENT_RANK() - 百分比排名

              • CUME_DIST() - 累积分布

                4. 系统函数

                • USER() / CURRENT_USER - 当前用户

                • DATABASE() - 当前数据库

                • VERSION() - 数据库版本

                • LAST_INSERT_ID() (MySQL) - 最后插入的ID


                  完整的SQL函数分类及使用示例

                • 一、聚合函数 (Aggregate Functions)

                  1. COUNT()

                  sql

                  -- 计算所有行数
                  SELECT COUNT(*) FROM products;
                  -- 计算特定列非NULL值
                  SELECT COUNT(product_name) FROM products;
                  -- 计算不同值的数量
                  SELECT COUNT(DISTINCT category_id) FROM products;

                  2. SUM()

                  sql

                  -- 计算总和
                  SELECT SUM(quantity) FROM inventory;
                  -- 带条件的求和
                  SELECT SUM(price) FROM orders WHERE order_date > '2023-01-01';

                  3. AVG()

                  sql

                  -- 计算平均值
                  SELECT AVG(rating) FROM product_reviews;
                  -- 结合ROUND函数
                  SELECT ROUND(AVG(salary), 2) FROM employees;

                  4. MIN()/MAX()

                  sql

                  复制

                  -- 最小值和最大值
                  SELECT MIN(price), MAX(price) FROM products;
                  -- 日期最值
                  SELECT MIN(hire_date), MAX(hire_date) FROM employees;

                  5. GROUP_CONCAT()/STRING_AGG()

                  sql

                  -- MySQL
                  SELECT department_id, GROUP_CONCAT(employee_name SEPARATOR '; ') 
                  FROM employees GROUP BY department_id;
                  -- SQL Server/PostgreSQL
                  SELECT department_id, STRING_AGG(employee_name, '; ') 
                  FROM employees GROUP BY department_id;

                  6. STDDEV()/VARIANCE()

                  sql

                  -- 标准差和方差
                  SELECT STDDEV(salary), VARIANCE(salary) FROM employees;

                  二、标量函数 (Scalar Functions)

                  字符串函数

                  1. CONCAT()

                  sql

                  SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;
                  2. SUBSTRING()/SUBSTR()

                  sql

                  SELECT SUBSTRING('Database', 1, 4); -- 返回'Data'
                  SELECT SUBSTR(email, 1, POSITION('@' IN email)-1) AS username FROM users;
                  3. TRIM()

                  sql

                  SELECT TRIM('   SQL   '); -- 返回'SQL'
                  SELECT TRIM(BOTH 'x' FROM 'xxSQLxx'); -- 返回'SQL'
                  4. UPPER()/LOWER()

                  sql

                  SELECT UPPER('Hello'); -- 'HELLO'
                  SELECT LOWER('SQL');   -- 'sql'
                  5. LENGTH()/LEN()

                  sql

                  -- MySQL/PostgreSQL
                  SELECT LENGTH('SQL'); -- 3
                  -- SQL Server
                  SELECT LEN('SQL');    -- 3
                  6. REPLACE()

                  sql

                  SELECT REPLACE('Hello World', 'World', 'SQL'); -- 'Hello SQL'
                  7. LEFT()/RIGHT()

                  sql

                  SELECT LEFT('Database', 4); -- 'Data'
                  SELECT RIGHT('Database', 3); -- 'ase'

                  数学函数

                  1. ABS()

                  sql

                  SELECT ABS(-15); -- 15
                  2. ROUND()

                  sql

                  SELECT ROUND(123.4567, 2); -- 123.46
                  3. CEIL()/CEILING()/FLOOR()

                  sql

                  SELECT CEIL(123.45);  -- 124
                  SELECT FLOOR(123.45); -- 123
                  4. MOD()

                  sql

                  SELECT MOD(10, 3); -- 1 (10除以3的余数)
                  5. POWER()/POW()

                  sql

                  SELECT POWER(2, 3); -- 8 (2的3次方)
                  6. SQRT()

                  sql

                  SELECT SQRT(25); -- 5
                  7. RAND()

                  sql

                  -- 生成0-1之间的随机数
                  SELECT RAND();
                  -- 生成1-100的随机整数(MySQL)
                  SELECT FLOOR(1 + RAND() * 100);

                  日期和时间函数

                  1. NOW()/CURRENT_TIMESTAMP

                  sql

                  SELECT NOW(); -- 返回当前日期时间 '2023-10-25 15:30:45'
                  2. CURDATE()/CURRENT_DATE

                  sql

                  SELECT CURDATE(); -- '2023-10-25'
                  3. CURTIME()/CURRENT_TIME

                  sql

                  SELECT CURTIME(); -- '15:30:45'
                  4. DATE()/TIME()

                  sql

                  SELECT DATE('2023-10-25 15:30:45'); -- '2023-10-25'
                  SELECT TIME('2023-10-25 15:30:45'); -- '15:30:45'
                  5. YEAR()/MONTH()/DAY()

                  sql

                  SELECT YEAR('2023-10-25'); -- 2023
                  SELECT MONTH('2023-10-25'); -- 10
                  SELECT DAY('2023-10-25'); -- 25
                  6. DATEDIFF()

                  sql

                  -- MySQL
                  SELECT DATEDIFF('2023-12-31', '2023-10-25'); -- 67
                  -- SQL Server
                  SELECT DATEDIFF(day, '2023-10-25', '2023-12-31');
                  7. DATE_ADD()/DATE_SUB()

                  sql

                  -- MySQL
                  SELECT DATE_ADD('2023-10-25', INTERVAL 7 DAY); -- '2023-11-01'
                  -- SQL Server
                  SELECT DATEADD(day, 7, '2023-10-25');
                  8. DAYNAME()/MONTHNAME()

                  sql

                  SELECT DAYNAME('2023-10-25'); -- 'Wednesday'
                  SELECT MONTHNAME('2023-10-25'); -- 'October'

                  转换函数

                  1. CAST()/CONVERT()

                  sql

                  SELECT CAST('123' AS SIGNED); -- 字符串转整数
                  SELECT CONVERT('2023-10-25', DATE); -- 字符串转日期
                  2. COALESCE()

                  sql

                  SELECT COALESCE(NULL, NULL, 'SQL', NULL, 'Example'); -- 'SQL'
                  3. NULLIF()

                  sql

                  SELECT NULLIF(10, 10); -- NULL
                  SELECT NULLIF(10, 20); -- 10

                  条件函数

                  1. CASE WHEN

                  sql

                  SELECT 
                      product_id,
                      price,
                      CASE 
                          WHEN price > 100 THEN 'Expensive'
                          WHEN price > 50 THEN 'Moderate'
                          ELSE 'Cheap'
                      END AS price_category
                  FROM products;
                  2. IF() (MySQL)

                  sql

                  SELECT IF(1 > 0, 'True', 'False'); -- 'True'
                  3. IIF() (SQL Server)

                  sql

                  SELECT IIF(1 > 0, 'True', 'False'); -- 'True'
                  4. DECODE() (Oracle)

                  sql

                  SELECT DECODE(status, 1, 'Active', 0, 'Inactive', 'Unknown') FROM users;

                  三、窗口函数 (Window Functions)

                  1. ROW_NUMBER()

                  sql

                  SELECT 
                      employee_id,
                      salary,
                      ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
                  FROM employees;

                  2. RANK()/DENSE_RANK()

                  sql

                  SELECT 
                      product_id,
                      sales,
                      RANK() OVER (ORDER BY sales DESC) AS rank,
                      DENSE_RANK() OVER (ORDER BY sales DESC) AS dense_rank
                  FROM products;

                  3. NTILE()

                  sql

                  SELECT 
                      customer_id,
                      total_purchases,
                      NTILE(4) OVER (ORDER BY total_purchases DESC) AS quartile
                  FROM customers;

                  4. LEAD()/LAG()

                  sql

                  SELECT 
                      date,
                      revenue,
                      LAG(revenue, 1) OVER (ORDER BY date) AS prev_day_revenue,
                      LEAD(revenue, 1) OVER (ORDER BY date) AS next_day_revenue
                  FROM daily_sales;

                  5. FIRST_VALUE()/LAST_VALUE()

                  sql

                  SELECT 
                      department_id,
                      employee_id,
                      salary,
                      FIRST_VALUE(employee_id) OVER (PARTITION BY department_id ORDER BY salary DESC) AS highest_paid
                  FROM employees;

                  6. PERCENT_RANK()/CUME_DIST()

                  sql

                  SELECT 
                      student_id,
                      score,
                      PERCENT_RANK() OVER (ORDER BY score) AS percentile,
                      CUME_DIST() OVER (ORDER BY score) AS cumulative_dist
                  FROM exam_results;

                  四、系统函数

                  1. USER()/CURRENT_USER

                  sql

                  SELECT USER(); -- 'root@localhost'

                  2. DATABASE()

                  sql

                  SELECT DATABASE(); -- 返回当前数据库名

                  3. VERSION()

                  sql

                  SELECT VERSION(); -- '8.0.26'

                  4. LAST_INSERT_ID() (MySQL)

                  sql

                  -- 获取最后插入的自动增量ID
                  SELECT LAST_INSERT_ID();
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码