大数据学习(106)-hivesql函数

发布于:2025-04-20 ⋅ 阅读:(14) ⋅ 点赞:(0)

🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


一、聚合函数(Aggregate Functions)

函数名 说明 示例
COUNT(*) 统计所有行数 SELECT COUNT(*) FROM orders;
COUNT(column) 统计非空值数量 SELECT COUNT(email) FROM users;
SUM(column) 计算数值列总和 SELECT SUM(price * quantity) AS total FROM order_items;
AVG(column) 计算数值列平均值 SELECT AVG(salary) FROM employees;
MIN(column) 获取最小值 SELECT MIN(created_at) FROM logs;
MAX(column) 获取最大值 SELECT MAX(temperature) FROM weather;
STDDEV(column) 计算标准差(部分数据库支持) SELECT STDDEV(score) FROM exams;
VAR(column) 计算方差(部分数据库支持) SELECT VAR(score) FROM exams;
GROUP_CONCAT() 合并多行字符串(MySQL) SELECT GROUP_CONCAT(DISTINCT category SEPARATOR ', ') FROM products;
STRING_AGG() 合并字符串(SQL Server/PostgreSQL) SELECT STRING_AGG(name, ', ') FROM tags;

二、字符串函数(String Functions)

函数名 说明 示例
CONCAT() 拼接字符串 SELECT CONCAT(first_name, ' ', last_name) AS full_name;
SUBSTRING(str, start, length) 截取子字符串 SELECT SUBSTRING('Hello World', 7, 5); → World
LEFT(str, length) 从左侧截取 SELECT LEFT('Hello', 3); → Hel
RIGHT(str, length) 从右侧截取 SELECT RIGHT('Hello', 3); → llo
LENGTH(str) 获取字符串长度 SELECT LENGTH('SQL'); → 3
CHAR_LENGTH(str) 获取字符数(多字节字符支持) SELECT CHAR_LENGTH('中文'); → 2
UPPER(str) 转大写 SELECT UPPER('hello'); → HELLO
LOWER(str) 转小写 SELECT LOWER('WORLD'); → world
TRIM(str) 去除空格 SELECT TRIM(' data '); → data
REPLACE(str, old, new) 替换子字符串 SELECT REPLACE('apple-banana', '-', ' '); → apple banana
INSTR(str, substr) 查找子串位置(MySQL) SELECT INSTR('hello world', 'world'); → 6
POSITION(substr IN str) 查找子串位置(PostgreSQL) SELECT POSITION('world' IN 'hello world'); → 6
LPAD(str, length, pad) 左侧填充 SELECT LPAD('7', 3, '0'); → 007
RPAD(str, length, pad) 右侧填充 SELECT RPAD('7', 3, '0'); → 700

三、数值函数(Numeric Functions)

函数名 说明 示例
ABS(num) 绝对值 SELECT ABS(-10); → 10
ROUND(num, decimals) 四舍五入 SELECT ROUND(3.14159, 2); → 3.14
CEIL(num) 向上取整 SELECT CEIL(4.2); → 5
FLOOR(num) 向下取整 SELECT FLOOR(4.8); → 4
POWER(base, exp) 计算幂 SELECT POWER(2, 3); → 8
MOD(num, divisor) 取模(余数) SELECT MOD(10, 3); → 1
SQRT(num) 平方根 SELECT SQRT(16); → 4
RAND() 生成随机数(0-1之间) SELECT RAND(); → 0.123456
SIGN(num) 返回符号(-1, 0, 1) SELECT SIGN(-5); → -1

四、日期时间函数(Date/Time Functions)

通用函数

函数名 说明 示例
NOW() 当前时间戳 SELECT NOW(); → 2023-10-05 14:30:00
CURRENT_DATE 当前日期 SELECT CURRENT_DATE; → 2023-10-05
CURRENT_TIME 当前时间 SELECT CURRENT_TIME; → 14:30:00
EXTRACT(part FROM date) 提取日期部分 SELECT EXTRACT(YEAR FROM '2023-10-05'); → 2023
DATE_PART(part, date) 提取日期部分(PostgreSQL) SELECT DATE_PART('month', '2023-10-05'); → 10
MySQL

函数名 说明 示例
DATE_FORMAT(date, format) 格式化日期 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
DATE_ADD(date, INTERVAL expr) 日期加减 SELECT DATE_ADD('2023-10-05', INTERVAL 1 DAY); → 2023-10-06
DATEDIFF(date1, date2) 日期差值(天数) SELECT DATEDIFF('2023-10-10', '2023-10-01'); → 9
PostgreSQL

函数名 说明 示例
TO_CHAR(date, format) 格式化日期 SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS');
DATE_TRUNC(part, date) 截断日期到指定精度 SELECT DATE_TRUNC('month', NOW()); → 2023-10-01
AGE(date) 计算当前时间与给定时间的差值 SELECT AGE(NOW(), '2023-01-01'); → 9 months
SQL Server

函数名 说明 示例
FORMAT(date, format) 格式化日期 SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss');
DATEADD(part, num, date) 日期加减 SELECT DATEADD(DAY, 1, '2023-10-05'); → 2023-10-06
DATEDIFF(part, date1, date2) 日期差值 SELECT DATEDIFF(DAY, '2023-10-01', '2023-10-10'); → 9

五、条件函数(Conditional Functions)

函数名 说明 示例
CASE WHEN 多条件分支 sql SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END;
COALESCE(arg1, arg2, ...) 返回第一个非空值 SELECT COALESCE(null_column, 'N/A');
NULLIF(arg1, arg2) 若两值相等则返回 NULL SELECT NULLIF(value, 0); → 若 value=0 则返回 NULL
IIF(condition, true_value, false_value) 简单条件(SQL Server) SELECT IIF(age > 18, 'Adult', 'Minor');
SWITCH(expr, case1, result1, case2, result2, ...) 多分支(部分数据库支持) SELECT SWITCH(role, 'admin', 1, 'user', 2);

六、窗口函数(Window Functions)

函数名 说明 示例
ROW_NUMBER() 生成行号(唯一) SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num;
RANK() 排名(允许并列,如1,1,3) SELECT RANK() OVER (PARTITION BY department ORDER BY sales DESC);
DENSE_RANK() 密集排名(无间隔,如1,1,2) SELECT DENSE_RANK() OVER (ORDER BY score DESC);
SUM(column) OVER() 分区内累计值 SELECT SUM(amount) OVER (PARTITION BY user_id ORDER BY date) AS running_total;
AVG(column) OVER() 分区内平均值 SELECT AVG(price) OVER (PARTITION BY category);
LEAD(column, offset) 获取后续行的值 SELECT LEAD(date, 1) OVER (ORDER BY date) AS next_date;
LAG(column, offset) 获取前一行值 SELECT LAG(price, 1) OVER (ORDER BY date) AS prev_price;
NTILE(num_buckets) 将数据分为指定数量的桶 SELECT NTILE(4) OVER (ORDER BY score) AS quartile;

七、系统函数(System Functions)

函数名 说明 示例
USER / CURRENT_USER 当前登录用户 SELECT USER();
VERSION() 数据库版本 SELECT VERSION(); → MySQL 8.0.30
DATABASE() 当前数据库名 SELECT DATABASE();
@@IDENTITY 最后插入的自动增长ID(SQL Server) INSERT INTO table VALUES(...); SELECT @@IDENTITY;
UUID() / GEN_RANDOM_UUID() 生成唯一标识符(PostgreSQL) SELECT GEN_RANDOM_UUID(); → a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
CURRENT_TIMESTAMP 当前时间戳(标准SQL) SELECT CURRENT_TIMESTAMP;

八、类型转换函数

函数名 说明 示例
CAST(expr AS type) 显式类型转换 SELECT CAST('123' AS INT);
CONVERT(type, expr) 类型转换(支持格式指定) SELECT CONVERT(VARCHAR, 123);
TRY_CAST(expr AS type) 安全转换(失败返回NULL,SQL Server) SELECT TRY_CAST('abc' AS INT); → NULL
::type PostgreSQL简写类型转换 SELECT '123'::INT;

九、其他函数

函数名 说明 示例
EXISTS(subquery) 检查子查询是否存在结果 SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE users.id = orders.user_id);
IN(list) 匹配列表中的值 SELECT * FROM products WHERE category IN ('Electronics', 'Books');
BETWEEN start AND end 范围筛选 SELECT * FROM logs WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31';
JSON_VALUE(json, path) 提取JSON字段值(SQL Server) SELECT JSON_VALUE(data, '$.name') FROM json_table;
~(正则表达式) 正则匹配(PostgreSQL) SELECT 'hello' ~ '^h'; → true
PI() 返回圆周率π SELECT PI(); → 3.141592653589793

注意事项

  1. 数据库差异:不同数据库的函数名称和参数可能不同(如日期函数)。
  2. 性能优化:避免在大型数据集上频繁使用复杂函数。
  3. 兼容性:标准SQL函数(如CURRENT_TIMESTAMP)通常跨数据库兼容。

网站公告

今日签到

点亮在社区的每一天
去签到