hive數據類型轉換、字符串函數、條件判斷

http://blog.csdn.net/yimingsilence/article/details/70057638函數

 

數據類型轉換

同Java語言同樣,Hive也包括 隱式轉換(implicit conversions)和顯式轉換(explicitly conversions)。
  Hive在須要的時候將會對numeric類型的數據進行隱式轉換。好比咱們對兩個不一樣數據類型的數字進行比較,假如一個數據類型是INT型,另外一個 是SMALLINT類型,那麼SMALLINT類型的數據將會被隱式轉換地轉換爲INT類型,這個到底和Java中的同樣;可是咱們不能隱式地將一個 INT類型的數據轉換成SMALLINT或TINYINT類型的數據,這將會返回錯誤,除非你使用了CAST操做。spa

  任何整數類型均可以隱式地轉換成一個範圍更大的類型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING均可以隱式 地轉換成DOUBLE;是的你沒看出,STRING也能夠隱式地轉換成DOUBLE!可是你要記住,BOOLEAN類型不能轉換爲其餘任何數據類型!

  下標列出了Hive內置的數據類型之間是否能夠進行隱式的轉換操做:.net

  bl tinyint si int bigint float double dm string vc ts date ba
boolean true false false false false false false false false false false false false
tinyint false true true true true true true true true true false false false
smallint false false true true true true true true true true false false false
int false false false true true true true true true true false false false
bigint false false false false true true true true true true false false false
float false false false false false true true true true true false false false
double false false false false false false true true true true false false false
decimal false false false false false false false true true true false false false
string false false false false false false true true true true false false false
varchar false false false false false false true true true true false false false
ts false false false false false false false false true true true false false
date false false false false false false false false true true false true false
binary false false false false false false false false false false false false true

  

  注:因爲表格比較大,這裏對一些比較長的字符串進行縮寫,ts是timestamp的縮寫,bl是boolean的縮寫,sl是smallint的縮寫,dm是decimal的縮寫,vc是varchar的縮寫,ba是binary的縮寫。code

 咱們能夠用CAST來顯式的將一個類型的數據轉換成另外一個數據類型。如何使用?CAST的語法爲cast(value AS TYPE)。舉個例子:假如咱們一個員工表employees,其中有name、salary等字段;salary是字符串類型的。有以下的查詢:blog

1 SELECT name, salary FROM employees
2 WHERE cast(salary AS FLOAT) <</code> 100000.0;

  這樣salary將會顯示的轉換成float。若是salary是不能轉換成float,這時候cast將會返回NULL!
  對cast有一下幾點須要說明的:
  (1)、若是將浮點型的數據轉換成int類型的,內部操做是經過round()或者floor()函數來實現的,而不是經過cast實現!
  (2)、對於BINARY類型的數據,只能將BINARY類型的數據轉換成STRING類型。若是你確信BINARY類型數據是一個數字類型(a number),這時候你能夠利用嵌套的cast操做,好比a是一個BINARY,且它是一個數字類型,那麼你能夠用下面的查詢:ci

1 SELECT (cast(cast(a as string) as double)) from src;

咱們也能夠將一個String類型的數據轉換成BINARY類型。
  (3)、對於Date類型的數據,只能在Date、Timestamp以及String之間進行轉換。下表將進行詳細的說明字符串

有效的轉換 結果
cast(date as date) 返回date類型
cast(timestamp as date) timestamp中的年/月/日的值是依賴與當地的時區,結果返回date類型
cast(string as date) 若是string是YYYY-MM-DD格式的,則相應的年/月/日的date類型的數據將會返回;但若是string不是YYYY-MM-DD格式的,結果則會返回NULL。
cast(date as timestamp) 基於當地的時區,生成一個對應date的年/月/日的時間戳值
cast(date as string) date所表明的年/月/日時間將會轉換成YYYY-MM-DD的字符串。
相關文章
相關標籤/搜索