1. 程式人生 > >hive支援sql大全(4-6:數值計算/日期函式/條件函式)

hive支援sql大全(4-6:數值計算/日期函式/條件函式)

四、數值計算1. 取整函式: round 語法: round(double a) 返回值: BIGINT 說明: 返回double型別的整數值部分(遵循四捨五入) 舉例: hive> select round(3.1415926) from lxw_dual; 3 hive> select round(3.5) from lxw_dual; 4 hive> create table lxw_dual as select round(9542.158) fromlxw_dual; hive> describe lxw_dual; _c0     bigint
2. 指定精度取整函式
: round
語法: round(double a, int d) 返回值: DOUBLE 說明: 返回指定精度d的double型別 舉例: hive> select round(3.1415926,4) from lxw_dual; 3.1416
3. 向下取整函式: floor 語法: floor(double a) 返回值: BIGINT 說明: 返回等於或者小於該double變數的最大的整數 舉例: hive> select floor(3.1415926) from lxw_dual; 3 hive> select floor(25) from lxw_dual; 25
4. 向上取整函式
: ceil
語法: ceil(double a) 返回值: BIGINT 說明: 返回等於或者大於該double變數的最小的整數 舉例: hive> select ceil(3.1415926) from lxw_dual; 4 hive> select ceil(46) from lxw_dual; 46
5. 向上取整函式: ceiling 語法: ceiling(double a) 返回值: BIGINT 說明: 與ceil功能相同 舉例: hive> select ceiling(3.1415926) from lxw_dual; 4 hive> select ceiling(46) from lxw_dual; 46 6. 取隨機數函式
: rand
語法: rand(),rand(int seed) 返回值: double 說明: 返回一個0到1範圍內的隨機數。如果指定種子seed,則會等到一個穩定的隨機數序列 舉例: hive> select rand() from lxw_dual; 0.5577432776034763 hive> select rand() from lxw_dual; 0.6638336467363424 hive> select rand(100) from lxw_dual; 0.7220096548596434 hive> select rand(100) from lxw_dual; 0.7220096548596434
7. 自然指數函式: exp 語法: exp(double a) 返回值: double 說明: 返回自然對數e的a次方 舉例: hive> select exp(2) from lxw_dual; 7.38905609893065 自然對數函式: ln 語法: ln(double a) 返回值: double 說明: 返回a的自然對數 舉例: hive> select ln(7.38905609893065) from lxw_dual; 2.0
8. 10為底對數函式: log10 語法: log10(double a) 返回值: double 說明: 返回以10為底的a的對數 舉例: hive> select log10(100) from lxw_dual; 2.0
9. 2為底對數函式: log2 語法: log2(double a) 返回值: double 說明: 返回以2為底的a的對數 舉例: hive> select log2(8) from lxw_dual; 3.0
10. 對數函式: log 語法: log(double base, double a) 返回值: double 說明: 返回以base為底的a的對數 舉例: hive> select log(4,256) from lxw_dual; 4.0
11. 冪運算函式: pow 語法: pow(double a, double p) 返回值: double 說明: 返回a的p次冪 舉例: hive> select pow(2,4) from lxw_dual; 16.0
12. 冪運算函式: power 語法: power(double a, double p) 返回值: double 說明: 返回a的p次冪,與pow功能相同 舉例: hive> select power(2,4) from lxw_dual; 16.0
13. 開平方函式: sqrt 語法: sqrt(double a) 返回值: double 說明: 返回a的平方根 舉例: hive> select sqrt(16) from lxw_dual; 4.0
14. 二進位制函式: bin 語法: bin(BIGINT a) 返回值: string 說明: 返回a的二進位制程式碼表示 舉例: hive> select bin(7) from lxw_dual; 111
15. 十六進位制函式: hex 語法: hex(BIGINT a) 返回值: string 說明: 如果變數是int型別,那麼返回a的十六進位制表示;如果變數是string型別,則返回該字串的十六進位制表示 舉例: hive> select hex(17) from lxw_dual; 11 hive> select hex(‘abc’) from lxw_dual; 616263
16. 反轉十六進位制函式: unhex 語法: unhex(string a) 返回值: string 說明: 返回該十六進位制字串所程式碼的字串 舉例: hive> select unhex(‘616263’)from lxw_dual; abc hive> select unhex(‘11’)from lxw_dual; - hive> select unhex(616263) from lxw_dual; abc
17. 進位制轉換函式: conv 語法: conv(BIGINT num, int from_base, int to_base) 返回值: string 說明: 將數值num從from_base進位制轉化到to_base進位制 舉例: hive> select conv(17,10,16) from lxw_dual; 11 hive> select conv(17,10,2) from lxw_dual; 10001
18. 絕對值函式: abs 語法: abs(double a)   abs(int a) 返回值: double        int 說明: 返回數值a的絕對值 舉例: hive> select abs(-3.9) from lxw_dual; 3.9 hive> select abs(10.9) from lxw_dual; 10.9
19. 正取餘函式: pmod 語法: pmod(int a, int b),pmod(double a, double b) 返回值: int double 說明: 返回正的a除以b的餘數 舉例: hive> select pmod(9,4) from lxw_dual; 1 hive> select pmod(-9,4) from lxw_dual; 3
20. 正弦函式: sin 語法: sin(double a) 返回值: double 說明: 返回a的正弦值 舉例: hive> select sin(0.8) from lxw_dual; 0.7173560908995228
21. 反正弦函式: asin 語法: asin(double a) 返回值: double 說明: 返回a的反正弦值 舉例: hive> select asin(0.7173560908995228) from lxw_dual; 0.8
22. 餘弦函式: cos 語法: cos(double a) 返回值: double 說明: 返回a的餘弦值 舉例: hive> select cos(0.9) from lxw_dual; 0.6216099682706644
23. 反餘弦函式: acos 語法: acos(double a) 返回值: double 說明: 返回a的反餘弦值 舉例: hive> select acos(0.6216099682706644) from lxw_dual; 0.9 24. positive函式: positive 語法: positive(int a), positive(double a) 返回值: int double 說明: 返回a 舉例: hive> select positive(-10) from lxw_dual; -10 hive> select positive(12) from lxw_dual; 12 25. negative函式: negative 語法: negative(int a), negative(double a) 返回值: int double 說明: 返回-a 舉例: hive> select negative(-5) from lxw_dual; 5 hive> select negative(8) from lxw_dual; -8 五、日期函式1. UNIX時間戳轉日期函式:from_unixtime 語法: from_unixtime(bigint unixtime[, string format]) 返回值: string 說明: 轉化UNIX時間戳(從1970-01-01 00:00:00 UTC到指定時間的秒數)到當前時區的時間格式 舉例: hive> select from_unixtime(1323308943,'yyyyMMdd') from lxw_dual; 20111208 2. 獲取當前UNIX時間戳函式:unix_timestamp 語法: unix_timestamp() 返回值: bigint 說明: 獲得當前時區的UNIX時間戳 舉例: hive> select unix_timestamp() from lxw_dual; 1323309615 3. 日期轉UNIX時間戳函式:unix_timestamp 語法: unix_timestamp(string date) 返回值: bigint 說明: 轉換格式為"yyyy-MM-ddHH:mm:ss"的日期到UNIX時間戳。如果轉化失敗,則返回0。 舉例: hive> select unix_timestamp('2011-12-07 13:01:03') from lxw_dual; 1323234063 4. 指定格式日期轉UNIX時間戳函式:unix_timestamp 語法: unix_timestamp(string date, string pattern) 返回值: bigint 說明: 轉換pattern格式的日期到UNIX時間戳。如果轉化失敗,則返回0。 舉例: hive> select unix_timestamp('20111207 13:01:03','yyyyMMddHH:mm:ss') from lxw_dual; 1323234063 5. 日期時間轉日期函式:to_date 語法: to_date(string timestamp) 返回值: string 說明: 返回日期時間欄位中的日期部分。 舉例: hive> select to_date('2011-12-08 10:03:01') from lxw_dual; 2011-12-08
6. 日期轉年函式: year 語法: year(string date) 返回值: int 說明: 返回日期中的年。 舉例: hive> select year('2011-12-08 10:03:01') from lxw_dual; 2011 hive> select year('2012-12-08')from lxw_dual; 2012
7. 日期轉月函式: month 語法: month (string date) 返回值: int 說明: 返回日期中的月份。 舉例: hive> select month('2011-12-08 10:03:01') from lxw_dual; 12 hive> select month('2011-08-08')from lxw_dual; 8
8. 日期轉天函式: day 語法: day (string date) 返回值: int 說明: 返回日期中的天。 舉例: hive> select day('2011-12-08 10:03:01') from lxw_dual; 8 hive> select day('2011-12-24')from lxw_dual; 24
9. 日期轉小時函式: hour 語法: hour (string date) 返回值: int 說明: 返回日期中的小時。 舉例: hive> select hour('2011-12-08 10:03:01') from lxw_dual; 10
10. 日期轉分鐘函式: minute 語法: minute (string date) 返回值: int 說明: 返回日期中的分鐘。 舉例: hive> select minute('2011-12-08 10:03:01') from lxw_dual; 3
11. 日期轉秒函式: second 語法: second (string date) 返回值: int 說明: 返回日期中的秒。 舉例: hive> select second('2011-12-08 10:03:01') from lxw_dual; 1
12. 日期轉周函式:weekofyear 語法: weekofyear (string date) 返回值: int 說明: 返回日期在當前的週數。 舉例: hive> select weekofyear('2011-12-08 10:03:01') from lxw_dual; 49
13. 日期比較函式: datediff 語法: datediff(string enddate, string startdate) 返回值: int 說明: 返回結束日期減去開始日期的天數。 舉例: hive> select datediff('2012-12-08','2012-05-09')from lxw_dual; 213
14. 日期增加函式: date_add 語法: date_add(string startdate, int days) 返回值: string 說明: 返回開始日期startdate增加days天后的日期。 舉例: hive> select date_add('2012-12-08',10)from lxw_dual; 2012-12-18
15. 日期減少函式: date_sub 語法: date_sub (string startdate, int days) 返回值: string 說明: 返回開始日期startdate減少days天后的日期。 舉例: hive> select date_sub('2012-12-08',10)from lxw_dual; 2012-11-28
六、條件函式1. If函式: if 語法: if(boolean testCondition, T valueTrue, T valueFalseOrNull) 返回值: T 說明:  當條件testCondition為TRUE時,返回valueTrue;否則返回valueFalseOrNull 舉例: hive> select if(1=2,100,200) from lxw_dual; 200 hive> select if(1=1,100,200) from lxw_dual; 100
2. 非空查詢函式: COALESCE 語法: COALESCE(T v1, T v2, …) 返回值: T 說明:  返回引數中的第一個非空值;如果所有值都為NULL,那麼返回NULL 舉例: hive> select COALESCE(null,'100','50′) from lxw_dual; 100
3. 條件判斷函式:CASE 語法: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END 返回值: T 說明:如果a等於b,那麼返回c;如果a等於d,那麼返回e;否則返回f 舉例: hive> Select case 100 when 50 then 'tom' when 100 then 'mary'else 'tim' end from lxw_dual; mary hive> Select case 200 when 50 then 'tom' when 100 then 'mary'else 'tim' end from lxw_dual; tim
4. 條件判斷函式:CASE 語法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END 返回值: T 說明:如果a為TRUE,則返回b;如果c為TRUE,則返回d;否則返回e 舉例: hive> select case when 1=2 then 'tom' when 2=2 then 'mary' else'tim' end from lxw_dual; mary hive> select case when 1=1 then 'tom' when 2=2 then 'mary' else'tim' end from lxw_dual; tom