hive 数字转换字符串_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) < 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的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值