hive SQL(HQL)葵花宝典

只谈情不闲聊 提交于 2019-12-11 04:47:19

1. 基本数据类型

tinyint , smallint, int, bigint, float, double, boolean: true/false, string

2.基础运算符与函数

A IS NULL         空
A IS NOT NULL     非空ro
A LIKE B     模糊匹配
A RLIKE B     正则表达式匹配
A REGEXP B  正则表达式匹配

SELECT
	'211' REGEXP '\\d.+',
	'211' REGEXP '\\D.+',
	'abc' REGEXP '\\d.+',
	'abc' REGEXP '\\D.+'

运行结果
true false false true

3. 内置运算符

3.1关系运算符

在这里插入图片描述

3.2算术运算符

在这里插入图片描述

3.3逻辑运算符

在这里插入图片描述

3.4复杂类型函数

待定

4.类型转换n

cast(expr as <type>) 
例如:
cast('1' as BIGINT)  将字符串'1'转化成bigint型

5.日期函数

**返回值类型**               **名称**                                    **描述**
string    from_unixtime(int unixtime)          将时间戳(unix epoch秒数)转换为日期时间字符串,例如from_unixtime(0)="1970-01-01 00:00:00"
bigint    unix_timestamp()                     获得当前时间戳,单位,秒
bigint    unix_timestamp(string date)          获得date表示的时间戳

5.1取年月日时分秒(格式化)

from_unixtime(unix_timestamp('2017-8-12 09:32:34'), 'yyyy-MM-dd hh:mm')

**取年月日再转TimeStamp:**
CAST(concat(to_date('2017-8-12 09:32:34'),' 00:00:00') AS TimeStamp)

**时间差(秒):**
unix_timestamp('2017-8-12 09:33:41')-unix_timestamp('2017-8-12 09:33:21')

**7天前:**
cast(concat(date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7),' 00:00:00') as timestamp)

5.2获取今天时间(格式可以自定义)

from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')
from_unixtime(unix_timestamp(),'yyyy-MM-dd')
from_unixtime(unix_timestamp(H6762_1.bocreatetime),'yyyy-MM-dd HH'),
from_unixtime(unix_timestamp(bo.boouttickettime), 'yyyy-MM-dd hh:00:00') as StatsDate
**取今日:**
CAST(from_unixtime(unix_timestamp(),'yyyy-MM-dd 00:00:00') AS TimeStamp)
**返回结果:**
2016-09-14 16:21:59
**获取今日:**
CAST(from_unixtime(unix_timestamp(),'yyyy-MM-dd 00:00:00') AS TimeStamp)

5.3计算年龄

bigint     to_date(string timestamp)                      返回日期字符串,例如to_date("1970-01-01 00:00:00") = "1970-01-01"
string     year(string date)                              返回年,例如year("1970-01-01 00:00:00") = 1970,year("1970-01-01") = 1970
int        month(string date)     
int        day(string date) ,dayofmonth(date)     
int        hour(string date)     
int        minute(string date)     
int        second(string date)     
int        weekofyear(string date)     
int        datediff(string enddate, string startdate)        返回enddate和startdate的天数的差,例如datediff('2009-03-01', '2009-02-27') = 2
int        date_add(string startdate, int days)              加days天数到startdate: date_add('2008-12-31', 1) = '2009-01-01'
int        date_sub(string startdate, int days)              减days天数到startdate: date_sub('2008-12-31', 1) = '2008-12-30'

5.4年月日拼接

SELECT
concat(
cast(psh.year as string),'-',
concat((case when psh.month<10 then '0' else '' end),cast(psh.month as string)),'-',
concat((case when psh.day<10 then '0' else '' end),cast(psh.day as string))
) as DateStr

5.5总结

Hive>   select from_unixtime(1323308943,’yyyyMMdd’) from dual;
20111208
获取当前UNIX时间戳函数: unix_timestamp语法:   unix_timestamp()
返回值:   bigint
说明: 获得当前时区的UNIX时间戳
举例:
hive>   select unix_timestamp() from dual;
1323309615
日期转UNIX时间戳函数: unix_timestamp语法:   unix_timestamp(string date)
返回值:   bigint
说明: 转换格式为“yyyy-MM-dd HH:mm:ss“的日期到UNIX时间戳。如果转化失败,则返回0。
举例:
hive>   select unix_timestamp(’2011-12-07 13:01:03′) from dual;
1323234063
指定格式日期转UNIX时间戳函数: unix_timestamp语法:   unix_timestamp(string date, string pattern)
返回值:   bigint
说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。
举例:
hive>   select unix_timestamp(’20111207 13:01:03′,’yyyyMMdd HH:mm:ss’) from dual;
1323234063
日期时间转日期函数: to_date语法:   to_date(string timestamp)
返回值:   string
说明: 返回日期时间字段中的日期部分。
举例:
hive>   select to_date(’2011-12-08 10:03:01′) from dual;
2011-12-08
日期转年函数: year语法:   year(string date)
返回值: int
说明: 返回日期中的年。
举例:
hive>   select year(’2011-12-08 10:03:01′) from dual;
2011
hive>   select year(’2012-12-08′) from dual;
2012
日期转月函数: month语法: month   (string date)
返回值: int
说明: 返回日期中的月份。
举例:
hive>   select month(’2011-12-08 10:03:01′) from dual;
12
hive>   select month(’2011-08-08′) from dual;
8
日期转天函数: day语法: day   (string date)
返回值: int
说明: 返回日期中的天。
举例:
hive>   select day(’2011-12-08 10:03:01′) from dual;
8
hive>   select day(’2011-12-24′) from dual;
24
日期转小时函数: hour语法: hour   (string date)
返回值: int
说明: 返回日期中的小时。
举例:
hive>   select hour(’2011-12-08 10:03:01′) from dual;
10
日期转分钟函数: minute语法: minute   (string date)
返回值: int
说明: 返回日期中的分钟。
举例:
hive>   select minute(’2011-12-08 10:03:01′) from dual;
3
日期转秒函数: second语法: second   (string date)
返回值: int
说明: 返回日期中的秒。
举例:
hive>   select second(’2011-12-08 10:03:01′) from dual;
1
日期转周函数: weekofyear语法:   weekofyear (string date)
返回值: int
说明: 返回日期在当前的周数。
举例:
hive>   select weekofyear(’2011-12-08 10:03:01′) from dual;
49
日期比较函数: datediff语法:   datediff(string enddate, string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数。
举例:
hive>   select datediff(’2012-12-08′,’2012-05-09′) from dual;
213
日期增加函数: date_add语法:   date_add(string startdate, int days)
返回值: string
说明: 返回开始日期startdate增加days天后的日期。
举例:
hive>   select date_add(’2012-12-08′,10) from dual;
2012-12-18
日期减少函数: date_sub语法:   date_sub (string startdate, int days)
返回值: string
说明: 返回开始日期startdate减少days天后的日期。
举例:
hive>   select date_sub(’2012-12-08′,10) from dual;
2012-11-28

6.条件函数

返回值类型     名称                                                      描述
-     if(boolean testCondition, T valueTrue, T valueFalseOrNull)        当testCondition为真时返回valueTrue,testCondition为假或NULL时返回valueFalseOrNull
-     COALESCE(T v1, T v2, ...)                                        返回列表中的第一个非空元素,如果列表元素都为空则返回NULL
-     CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END                a = b,返回c;a = d,返回e;否则返回f
-     CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END                  a 为真,返回b;c为真,返回d;否则e
例如:
(
case 
when category = '1512' then reserve_price > cast(1000 as double)
when category = '1101' then reserve_price > cast(2500 as double)
else reserve_price > cast(10 as double)
end
)

7.常用字符串函数

返回值类型      名称                                                             描述
int     length(string A)                                                          返回字符串长度
string     reverse(string A)                                                      反转字符串
string     concat(string A, string B...)                                          合并字符串,例如concat('foo', 'bar')='foobar'。注意这一函数可以接受任意个数的参数
string     substr(string A, int start) substring(string A, int start)              返回子串,例如substr('foobar', 4)='bar',详见 [4]
string     substr(string A, int start, int len) substring(string A, int start, int len)     返回限定长度的子串,例如substr('foobar', 4, 1)='b',详见[5]
string     upper(string A) ucase(string A)                                        转换为大写
string     lower(string A) lcase(string A)                                        转换为小写
string     trim(string A)     
string     ltrim(string A)     
string     rtrim(string A) 
string     regexp_extract(string subject, string pattern, int intex)            返回使用正则表达式提取的子字串。
                                                                           例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)='bar'。注意使用特殊字符的规则:
                                                                           使用'\s'代表的是字符's';空白字符需要使用'\\s',以此类推。
string     space(int n)                                                          返回一个包含n个空格的字符串
string     repeat(string str, int n)                                            重复str字符串n遍
string     ascii(string str)                                                    返回str中第一个字符的ascii码
string     lpad(string str, int len, string pad)                                左端补齐str到长度为len。补齐的字符串由pad指定。
string     rpad(string str, int len, string pad)                                右端补齐str到长度为len。补齐的字符串由pad指定。
array     split(string str, string pat)                                        返回使用pat作为正则表达式分割str字符串的列表。例如,split('foobar', 'o')[2] = 'bar'。       
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!