HIVE函数

深入解析:SQL函数与日期处理在数据库中的应用
本文详细介绍了SQL中的数学函数(如round、floor、ceil等)、类型转换函数、日期时间操作(如from_unixtime、unix_timestamp等),并展示了如何在实际场景中运用这些函数进行数据处理和格式转换。

文章仅作为笔记使用,会持续更新

数学函数

-- round(DOUBLE a) 返回对a四舍五入的最大整数值,类型为double
select round(10.234); -- 返回10
select round(10.234,2); -- 返回10.23
select round(10.235,2); -- 返回10.24

-- floor(DOUBLE a) 向下取整
select floor(10.3); -- 10
select floor(-10.3); -- -11

-- ceil(DOUBLE a)/ceiling(double a) 向上取整
select ceil(10.3); -- 11
select ceiling(10.3); -- 11

-- rand() 返回一个0到1范围内的随机数
select rand();
-- rand(INT seed) 返回一个0到1范围内的随机数 seed不变,随机数不变
select rand(10);

-- pow(double a,double b)	a的b次方
select pow(3,2); -- 9

-- sqrt(double a) 开根号,若a为负数返回null
select sqrt(9); -- 3

-- abs(double a) 取绝对值
select abs(-10.1); -- 10.1

-- pmod(int a,int b) a除b的余数
select pmod(10,3); -- 1

类型转换函数

-- cast(expr as<type>) 将expr转换成type类型,如果转换失败将返回NULL
select CAST('1' AS int);
-- binary 将输入的值转换成二进制,一般不用

日期函数

-- from_unixtime(bigint unixtime) 将时间戳转换成format格式
select from_unixtime(1594604100); -- 2020-07-13 09:35:00
select from_unixtime(1594604100,'yyyy-MM-dd');-- 2020-07-13

-- unix_timestamp() 获取本地时区下的时间戳
select unix_timestamp(); -- 1594616493

-- unix_timestamp(string date) 将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳
select unix_timestamp('2020-07-13 09:35:00'); -- 1594604100

-- to_date(string timestamp) 返回时间字符串的日期部分
select to_date('2020-07-13 09:35:00'); -- 2020-07-13

-- year(string date) 返回时间字符串的年份部分
select year('2020-07-13 09:35:15'); -- 2020

-- month(string date) 返回时间字符串的月份部分
select month('2020-07-13 09:35:15'); -- 7

-- day(string date)	返回时间字符串的天(月份)
select day('2020-07-13 09:35:15'); -- 13

-- hour(string date) 返回时间字符串的小时
select hour('2020-07-13 09:35:15'); -- 9

-- minute(string date)	返回时间字符串的分钟
select minute('2020-07-13 09:35:15'); -- 35

-- second(string date)	返回时间字符串的秒
select second('2020-07-13 09:35:15'); -- 15

-- dayofweek(string date)	返回时间字符串位于一周中的第几天,星期天开始为第一天
select dayofweek('2021-12-28'); -- 3

-- datediff(string enddate, string startdate)	计算开始时间startdate 到结束时间enddate相差的天数
select datediff('2020-07-13 00:00:00','2020-07-11 09:35:00'); -- 2

-- date_add(string startdate, int days)	从开始时间startdate加上days天数,day 为负数则为减
select date_add('2020-07-13 09:35:00',2); -- 2020-07-15

-- date_sub(string startdate, int days)	从开始时间startdate减去days天数,为负数则为加
select date_sub('2020-07-13 09:35:00',2); -- 2020-07-11

-- current_date	返回当前时间日期
select current_date(); -- YYYY-MM-DD

-- add_months(string start_date, int num_months)	返回当前时间下再增加num_months个月的日期
select add_months('2021-12-28',3); -- 2022-03-28

-- last_day(string date)	返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)
select last_day('2021-07-28'); -- 2021-07-31

-- next_day(string start_date, string day_of_week)	返回当前时间的下一个星期X所对应的日期。 day_of_week:星期几的缩写
select next_day('2021-12-28','MO'); -- 2022-01-03

-- trunc(string date, string format) 返回时间的最开始年份或月份 ,注意所支持的格式为MONTH/MON/MM, YEAR/YYYY/YY
select trunc('2021-12-28','MM'); -- 2021-12-01
select trunc('2021-12-28','YYYY'); -- 2021-01-01

-- months_between(date1, date2)	返回date1减date2之间相差的月份,如date1>date2,则返回正,如果date1<date2,则返回负,否则返回0.0
select months_between('2021-12-28', '2021-07-28'); -- 5

-- date_format(date/timestamp/string ts, string fmt)	fmt格式
select date_format('2020-07-13','yyyy-MM'); -- 2020-07
select date_format('2020-07-13','yyyy'); -- 2020
select date_format('2020-07-13','yyyy-MM-dd'); -- 2020-07-13

将yyyyMMdd变成yyyy-MM-dd:
select to_date(from_unixtime(UNIX_TIMESTAMP('20210101','yyyyMMdd')));
### Hive内置函数概述 Hive 提供了大量的内置函数,用于支持数据处理中的各种操作需求。这些函数可以通过 `show functions` 命令查看完整的列表[^1]。对于特定的函数,可以使用 `desc function 函数名` 查看其基本描述,而更详细的用法则可通过 `desc function extended 函数名` 获取。 #### 内置函数分类 Hive 的内置函数通常分为以下几类: 1. **字符串函数** 例如 `upper()` 将字符串转换为大写形式,或者 `concat()` 进行字符串拼接。 2. **数值函数** 如 `abs(x)` 返回绝对值,`round(x)` 对浮点数四舍五入等。 3. **日期时间函数** 比如 `from_unixtime(unix_time, format)` 和 `unix_timestamp(date_string, pattern)` 可以实现 Unix 时间戳与标准时间格式之间的相互转换。 4. **集合与数组函数** 支持对复杂类型的处理,像 `array_contains(array, value)` 判断某个值是否存在于数组中。 5. **条件判断函数** 包括但不限于 `if(condition, true_value, false_value)` 或者 `case when ... then ... end`. 6. **聚合函数** 主要用于统计分析场景下的汇总计算,比如 `sum(column_name)`, `count(*)`, `avg(field)`. 7. **窗口函数** 实现基于分区的数据排序和排名等功能,典型代表有 `rank() over (...)`, `dense_rank() over (...)`. 8. **其他特殊用途的功能型函数** - `hash(a1, a2,...)` 计算输入参数组合后的散列值][^[^32]。 - `java_method(class, method [, arg1 [,arg2...]])`: 动态加载 Java 类并执行指定的方法调用[^3]. 以下是几个常用函数的具体说明及其语法示例: #### 示例代码展示部分重要功能的应用方式 ```sql -- 字符串转大写的例子 SELECT upper('hello world'); -- 数学运算取整的例子 SELECT round(3.1415); -- 处理日期时间字段 SELECT from_unixtime(UNIX_TIMESTAMP(), 'yyyy-MM-dd HH:mm:ss') AS current_datetime; -- 使用反射机制调用外部Java逻辑 SELECT java_method('java.lang.Math', 'sqrt', 16); ``` 以上仅列举了一小部分内容作为示范;实际应用过程中可以根据具体业务需求深入探索更多可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值