Hive函數(shù)大全(含例子)之數(shù)學函數(shù)(Mathematical Functions)

為了方便測試,創(chuàng)建了dual表捂掰,該表只有一個字段以及只有一行數(shù)據(jù)州邢,建表語句如下:

CREATE TABLE dual (
x INT
)

round(DOUBLE a)袖瞻,返回類型:DOUBLE

返回數(shù)字 a 四舍五入后的值

  • select round(1.5) from dual; -- 結果為 2
  • select round(1.1) from dual; -- 結果為 1

round(DOUBLE a, INT d),返回類型:DOUBLE

返回數(shù)字 a 四舍五入到小數(shù)點后 d 位的值

  • select round(1.15, 1) from dual; -- 結果為 1.2
  • select round(1.12, 1) from dual; -- 結果為 1.1
  • select round(1.12, 3) from dual; -- 結果為 1.12
  • select round(1.12, 0) from dual; -- 結果為 1.0
  • select round(1.12, -1) from dual; -- 結果為 0.0

bround(DOUBLE a)煞躬,返回類型:DOUBLE

返回數(shù)字 a 高斯舍入后的值

高斯舍入也稱銀行家舍入肛鹏,簡單的說就是四舍六入五考慮逸邦,五后非空就進一,五后為空看奇偶在扰,五前為偶應舍去缕减,五前為奇要進一

  • -- 四舍
  • select bround(1.4) from dual; -- 結果為 1.0
  • -- 六入
  • select bround(1.6) from dual; -- 結果為 2.0
  • -- 五后非空就進一
  • select bround(1.51) from dual; -- 結果為 2.0
  • -- 五前為偶應舍去
  • select bround(2.5) from dual; -- 結果為 2.0
  • -- 五前為奇要進一
  • select bround(3.5) from dual; -- 結果為 4.0

bround(DOUBLE a, INT d),返回類型:DOUBLE

返回數(shù)字 a 高斯舍入到小數(shù)點后 d 位的值

  • -- 四舍
  • select bround(1.14, 1) from dual; -- 結果為 1.1
  • -- 六入
  • select bround(1.16, 1) from dual; -- 結果為 1.2
  • -- 五后非空就進一
  • select bround(1.151, 1) from dual; -- 結果為 1.2
  • -- 五前為偶應舍去
  • select bround(1.25, 1) from dual; -- 結果為 1.2
  • -- 五前為奇要進一
  • select bround(1.35, 1) from dual; -- 結果為 1.4

floor(DOUBLE a)芒珠,返回類型:BIGINT

對數(shù)字 a 向下取整

  • select floor(1.1) from dual; -- 結果為 1
  • select floor(1.6) from dual; -- 結果為 1
  • select floor(-1.1) from dual; -- 結果為 -2
  • select floor(-1.6) from dual; -- 結果為 -2

ceil(DOUBLE a), ceiling(DOUBLE a)桥狡,返回類型:BIGINT

對數(shù)字 a 向上取整,ceil同ceiling

  • select ceil(1.1) from dual; -- 結果為 2
  • select ceil(1.6) from dual; -- 結果為 2
  • select floor(-1.1) from dual; -- 結果為 -1
  • select floor(-1.6) from dual; -- 結果為 -1

rand(), rand(INT seed)皱卓,返回類型:DOUBLE

如果?seed 不指定裹芝,則返回0到1之間的隨機數(shù),如:

  • select rand() from dual; -- 結果為 0.9811062452094043

如果 seed 指定了好爬,隨機數(shù)是確定的局雄,如:

  • select rand(2) from dual; -- 結果為 0.7311469360199058
  • select rand(2020) from dual; -- 結果為 0.6188119599189963
  • select rand(20201231) from dual; -- 結果為 0.9412005456293369

一般使用Unix時間戳作為seed

exp(DOUBLE a), exp(DECIMAL a),返回類型:DOUBLE

返回 e 的 a 次方

  • select exp(1) from dual; -- 結果為 2.718281828459045
  • select exp(1.5) from dual; -- 結果為 4.4816890703380645
  • select exp(2) from dual; -- 結果為 7.38905609893065
  • select exp(0) from dual; -- 結果為 1.0
  • select exp(-1) from dual; -- 結果為 0.36787944117144233

ln(DOUBLE a), ln(DECIMAL a)存炮,返回類型:DOUBLE

返回以 e 為底炬搭,a 的對數(shù)

  • select ln(0) from dual; -- 結果為 NULL
  • select ln(1) from dual; -- 結果為 0.0
  • select ln(2) from dual; -- 結果為 0.6931471805599453
  • select ln(2.718281828459045) from dual; -- 結果為 1.0

log10(DOUBLE a), log10(DECIMAL a),返回類型:DOUBLE

返回以 10 為底穆桂,a 的對數(shù)

  • select log10(1) from dual; -- 結果為 0.0
  • select log10(10) from dual; -- 結果為 1.0
  • select log10(0.1) from dual; -- 結果為 -1.0

log2(DOUBLE a), log2(DECIMAL a)宫盔,返回類型:DOUBLE

返回以 2 為底,a 的對數(shù)

  • select log10(1) from dual; -- 結果為 0.0
  • select log10(10) from dual; -- 結果為 1.0
  • select log10(0.1) from dual; -- 結果為 -1.0

log(DOUBLE base, DOUBLE a)享完,log(DECIMAL base, DECIMAL a)灼芭,返回類型:DOUBLE

返回以 base 為底,a 的對數(shù)

  • select log(1.1, 1.21) from dual; -- 結果為 1.9999999999999982
  • select log(2, 4) from dual; -- 結果為 2.0
  • select log(3.1, 5) from dual; -- 結果為 1.4225162708181491

pow(DOUBLE a, DOUBLE p), power(DOUBLE a, DOUBLE p)般又,返回類型:DOUBLE

返回 a 的 p 次方

  • select pow(-1, 2) from dual; -- 結果為 1.0
  • select pow(0, 1.21) from dual; -- 結果為 0.0
  • select pow(1.1, 2) from dual; -- 結果為 1.2100000000000002

sqrt(DOUBLE a), sqrt(DECIMAL a)彼绷,返回類型:DOUBLE

返回 a 的 平方根

  • select sqrt(4) from dual; -- 結果為 2.0
  • select sqrt(1.21) from dual; -- 結果為 1.1
  • select sqrt(-1) from dual; -- 結果為 NULL

bin(BIGINT a),返回類型:STRING

返回 a 的 二進制表達式

  • select bin(-1024) from dual; -- 結果為 1111111111111111111111111111111111111111111111111111110000000000
  • select bin(-1) from dual; -- 結果為 1111111111111111111111111111111111111111111111111111111111111111
  • select bin(1) from dual; -- 結果為 1
  • select bin(1024) from dual; -- 結果為 10000000000

hex(BIGINT a) hex(STRING a) hex(BINARY a)茴迁,返回類型:STRING

如果參數(shù) a 是整數(shù)寄悯,則返回十六進制表達式,如:

  • select hex(16) from dual; -- 結果為 10
  • select bin(-1024) from dual; -- 結果為
  • select bin(-1024) from dual; -- 結果為
  • select bin(-1024) from dual; -- 結果為

如果參數(shù) a 是字符串堕义,則逐一將字符串中的每個字符對應的ASCII碼以十六進制表示并返回猜旬,如:

  • select hex(16) from dual; -- 結果為 10
  • select hex(11) from dual; -- 結果為 B
  • select hex(-1) from dual; -- 結果為 FFFFFFFFFFFFFFFF

unhex(STRING a),返回類型:STRING

hex的逆函數(shù)倦卖,以十六進制解釋參數(shù) a 洒擦,并進行ASCII轉換,返回對應的字符

  • select unhex('41') from dual; -- 結果為 A
  • select unhex('42') from dual; -- 結果為 B
  • select unhex('4242') from dual; -- 結果為 BB

conv(BIGINT num, INT from_base, INT to_base), conv(STRING num, INT from_base, INT to_base)怕膛,返回類型:STRING

將數(shù)字 num 或者字符串 num 從 from_base 進制轉換到 to_base 進制

  • select conv('1024', 10, 2) from dual; -- 結果為 10000000000
  • select conv(1024, 10, 2) from dual; -- 結果為 10000000000
  • select conv(10000000000, 2, 10) from dual; -- 結果為 1024
  • select conv('A', 16, 10) from dual; -- 結果為 1

abs(DOUBLE a)熟嫩,返回類型:DOUBLE

返回 a 的絕對值

  • select abs('-1.024') from dual; -- 結果為 1.024
  • select abs('1.024') from dual; -- 結果為 1.024

pmod(INT a, INT b), pmod(DOUBLE a, DOUBLE b),返回類型:INT or DOUBLE

返回 a 模 b 的值褐捻,pmod(a, b) 同 a % b

  • select pmod(10, 3) from dual; -- 結果為 1
  • select 10 % 3 from dual; -- 結果為 1
  • select pmod(10.1, 2.5) from dual; -- 結果為 0.09999999999999964
  • select 10.1 % 2.5 from dual; -- 結果為 0.09999999999999964
  • select pmod(10, 2.5) from dual; -- 結果為 0.0

sin(DOUBLE a), sin(DECIMAL a)邦危,返回類型:DOUBLE

返回 a 的正弦值(a以弧度為單位洋侨,1弧度(rad)=57.29578度(°))

  • select sin(1) from dual; -- 結果為 0.8414709848078965
  • select sin(1 / 57.29578 * 90) from dual; -- 結果為 0.9999999999999999

asin(DOUBLE a), asin(DECIMAL a),返回類型:DOUBLE

返回 a 的反正弦值(-1<=a<=1)

  • select asin(0.8414709848078965) from dual; -- 結果為 1.0
  • select asin(1) * 57.29578 from dual; -- 結果為 90.0000007648485
  • select asin(10) from dual; -- 結果為 NaN

cos(DOUBLE a), cos(DECIMAL a)倦蚪,返回類型:DOUBLE

返回 a 的余弦值

  • select cos(1) from dual; -- 結果為 0.5403023058681398
  • select cos(1 / 57.29578 * 120) from dual; -- 結果為 -0.4999999845857585

acos(DOUBLE a), acos(DECIMAL a)希坚,返回類型:DOUBLE

返回 a 的反余弦值

  • select acos(0.5403023058681398) from dual; -- 結果為 1.0
  • select acos(0.5) * 57.29578 from dual; -- 結果為 60.00000050989901

tan(DOUBLE a), tan(DECIMAL a),返回類型:DOUBLE

返回 a 的正切值

  • select tan(1) from dual; -- 結果為 1.5574077246549023
  • select tan(1 / 57.29578 * 45) from dual; -- 結果為 0.9999999866508755

atan(DOUBLE a), atan(DECIMAL a)陵且,返回類型:DOUBLE

返回 a 的反正切值

  • select atan(1.5574077246549023) from dual; -- 結果為 1.0
  • select atan(1) * 57.29578 from dual; -- 結果為 45.00000038242425

degrees(DOUBLE a), degrees(DECIMAL a)裁僧,返回類型:DOUBLE

弧度(rad)轉為度(°):1弧度(rad)=57.29577951308232度(°)

  • select degrees(1) from dual; -- 結果為 57.29577951308232

radians(DOUBLE a), radians(DOUBLE a),返回類型:DOUBLE

度(°)轉為弧度(rad)

  • select radians(57.29577951308232) from dual; -- 結果為 1.0
  • select radians(90) from dual; -- 結果為 1.5707963267948966

positive(INT a), positive(DOUBLE a)慕购,返回類型:INT or DOUBLE

返回 a

  • select positive(1) from dual; -- 結果為 1
  • select positive(-1) from dual; -- 結果為 -1
  • select positive(1.024) from dual; -- 結果為 1.024

negative(INT a), negative(DOUBLE a)聊疲,返回類型:INT or DOUBLE

返回 -a

  • select negative(1) from dual; -- 結果為 -1
  • select negative(-1) from dual; -- 結果為 1
  • select negative(1.024) from dual; -- 結果為 -1.024

sign(DOUBLE a), sign(DECIMAL a),返回類型:DOUBLE or INT

如果 a 是正數(shù)沪悲,返回 1.0获洲;如果 a 是負數(shù),返回 -1.0殿如;如果 a 是 0贡珊,返回 0.0

  • select sign(2) from dual; -- 結果為 1.0
  • select sign(-2) from dual; -- 結果為 -1.0
  • select sign(0) from dual; -- 結果為 0.0
  • select sign(0) from dual; -- 結果為 0.0

e(),返回類型:DOUBLE

返回自然常數(shù) e 的值

  • select e() from dual; -- 結果為 2.718281828459045

pi()涉馁,返回類型:DOUBLE

返回圓周率 Pi 的值

  • select pi() from dual; -- 結果為 3.141592653589793

factorial(INT a)门岔,返回類型:BIGINT

返回 a 的階乘(n!=1×2×3×...×(n-1)×n)

  • select factorial(3) from dual; -- 結果為 6
  • select factorial(4) from dual; -- 結果為 24

cbrt(DOUBLE a),返回類型:DOUBLE

返回 a 的立方根

  • select cbrt(8) from dual; -- 結果為 2.0
  • select cbrt(1.331) from dual; -- 結果為 1.1

shiftleft(TINYINT|SMALLINT|INT a, INT b)烤送,shiftleft(BIGINT a, INT b)寒随,返回類型:INT or BIGINT

按位左移

  • select shiftleft(1, 1) from dual; -- 結果為 2
  • select shiftleft(1, 2) from dual; -- 結果為 4
  • select shiftleft(1024) from dual; -- 結果為 111111

shiftright(TINYINT|SMALLINT|INT a, INT b),shiftright(BIGINT a, INT b)帮坚,返回類型:INT or BIGINT

按位右移

  • select shiftright(1, 1) from dual; -- 結果為 0
  • select shiftright(1, 1) from dual; -- 結果為 0
  • select shiftright(1024, 1) from dual; -- 結果為 512
  • select shiftright(1024, 0) from dual; -- 結果為 1024
  • select shiftright(1024, -1) from dual; -- 結果為 0

shiftrightunsigned(TINYINT|SMALLINT|INT a, INT b)妻往,shiftrightunsigned(BIGINT a, INT b),返回類型:DOUBLE

按位無符號右移

  • select shiftrightunsigned(2, 1) from dual; -- 結果為 1
  • select shiftrightunsigned(1, 1) from dual; -- 結果為 0
  • select shiftrightunsigned(0, 1) from dual; -- 結果為 0
  • select shiftrightunsigned(-1, 1) from dual; -- 結果為 2147483647
  • select shiftrightunsigned(-2, 1) from dual; -- 結果為 2147483647

greatest(T v1, T v2, ...)试和,返回類型:T

返回最大值(如果列表中有一個值為NULL讯泣,則返回NULL)

  • select greatest(2, 3) from dual; -- 結果為 3
  • select greatest('11', '12', '9') from dual; -- 結果為 9
  • select greatest(NULL, 1, 2) from dual; -- 結果為 NULL

least(T v1, T v2, ...),返回類型:T

返回最小值(如果列表中有一個值為NULL灰署,則返回NULL)

  • select least(2, 3) from dual; -- 結果為 2
  • select least('11', '12', '9') from dual; -- 結果為 11
  • select least(NULL, 1, 2) from dual; -- 結果為 NULL

width_bucket(NUMERIC expr, NUMERIC min_value, NUMERIC max_value, INT num_buckets),返回類型:INT

返回一個介于 0 和 num_buckets + 1 之間的整數(shù)(基于通過將[min_value局嘁,max_value]劃分為大小相等的區(qū)域來生成存儲桶)溉箕;

如果 expr 小于 min_value 則返回1,如果 expr 大于 max_value 則返回 num_buckets + 1

  • select width_bucket(2, 1, 10, 5) from dual; -- 結果為 1
  • select width_bucket(1, 2, 11, 5) from dual; -- 結果為 1
  • select width_bucket(11, 1, 10, 5) from dual; -- 結果為 6
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悦昵,一起剝皮案震驚了整個濱河市肴茄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌但指,老刑警劉巖寡痰,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抗楔,死亡現(xiàn)場離奇詭異,居然都是意外死亡拦坠,警方通過查閱死者的電腦和手機连躏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贞滨,“玉大人入热,你說我怎么就攤上這事∠” “怎么了勺良?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骄噪。 經(jīng)常有香客問我尚困,道長,這世上最難降的妖魔是什么链蕊? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任事甜,我火速辦了婚禮,結果婚禮上示弓,老公的妹妹穿的比我還像新娘讳侨。我一直安慰自己,他們只是感情好奏属,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布跨跨。 她就那樣靜靜地躺著,像睡著了一般囱皿。 火紅的嫁衣襯著肌膚如雪勇婴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天嘱腥,我揣著相機與錄音耕渴,去河邊找鬼。 笑死齿兔,一個胖子當著我的面吹牛橱脸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播分苇,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼添诉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了医寿?” 一聲冷哼從身側響起栏赴,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靖秩,沒想到半個月后须眷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竖瘾,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年花颗,在試婚紗的時候發(fā)現(xiàn)自己被綠了捕传。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡捎稚,死狀恐怖乐横,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情今野,我是刑警寧澤葡公,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站条霜,受9級特大地震影響催什,放射性物質發(fā)生泄漏。R本人自食惡果不足惜宰睡,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一蒲凶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拆内,春花似錦旋圆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抹沪,卻和暖如春刻肄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背融欧。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工敏弃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人噪馏。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓麦到,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欠肾。 傳聞我的和親對象是個殘疾皇子瓶颠,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容