当前位置: 首页 > news >正文

SQL 函数概述

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() - 字符串长度

  • REPLACE() - 替换字符串

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

数学函数

  • ABS() - 绝对值

  • ROUND() - 四舍五入

  • 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();

相关文章:

  • Vue3实战四、项目布局及布局功能实现
  • 晋城市电子健康证上传照片尺寸要求及手机拍照制作方法
  • PyCharm使用Flask启动项目后,如何修改文件,开启启动加载或是热启动,不用重启项目,直接生效。
  • 双引擎驱动:解密音视频体验的QoS技术底座与QoE感官革命
  • ElasticSearch迁移数据
  • “剪贴板劫持“攻击:黑客利用虚假验证码通过入侵网站窃取数据
  • 自动化框架及其设计搭建浅谈(三)--自动化测试框架设计最佳实践
  • Elasticearch数据流向
  • Qt添加资源文件
  • APP应用为什么要选择使用游戏盾?从攻防本质到技术突围
  • 6.2 利用yaml进行参数的保存
  • PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt 含义解析
  • Linux(CentOS10) gcc编译
  • 大疆无人机系列知识
  • HTTP 308 错误永久重定向 (Permanent Redirect)
  • Java BigInteger 详解
  • 从云计算到算网融合:未来已来的算力革命
  • 416. 分割等和子集
  • 【WebRTC】开源项目Webrtc-streamer介绍
  • gbase8s之逻辑导出导入脚本(完美版本)
  • 做现金贷网站的公司/深圳网站建设找哪家公司好
  • 婚礼纪网站怎么做请帖/免费网络推广网站
  • 网站建设价格如何/南宁优化网站网络服务
  • 用c3做的动画网站/满足seo需求的网站
  • 做外贸搜客户的网站/新的seo网站优化排名 网站
  • 服装设计学院/看seo