写在前面的话,学《Hive的那些事》序列文章,分享给大家。我会在接下来的时间整理有关Hive的资料,如果对Hive的东西感兴趣,请关注本博客。/archives/tag/hive的那些事

在《Hive内置数据类型》文章中,我们提到了Hive内置数据类型由基本数据类型和复杂数据类型组成。今天的话题是Hive数据类型之间的转换。同Java语言一样,Hive也包括隐式转换(implicit conversions)和显式转换(explicitly conversions)。

Hive在需要的时候将会对numeric类型的数据进行隐式转换。比如我们对两个不同数据类型的数字进行比较,假如一个数据类型是INT型,另一个是SMALLINT类型,那么SMALLINT类型的数据将会被隐式转换地转换为INT类型,这个到底和Java中的一样;但是我们不能隐式地将一个INT类型的数据转换成SMALLINT或TINYINT类型的数据,这将会返回错误,除非你使用了CAST操作。

任何整数类型都可以隐式地转换成一个范围更大的类型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隐式地转换成DOUBLE;是的你没看出,STRING也可以隐式地转换成DOUBLE!但是你要记住,BOOLEAN类型不能转换为其他任何数据类型!

下标列出了Hive内置的数据类型之间是否可以进行隐式的转换操作:bltinyintsiintbigintfloatdoubledmstringvctsdateba

booleantruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse

tinyintfalsetruetruetruetruetruetruetruetruetruefalsefalsefalse

smallintfalsefalsetruetruetruetruetruetruetruetruefalsefalsefalse

intfalsefalsefalsetruetruetruetruetruetruetruefalsefalsefalse

bigintfalsefalsefalsefalsetruetruetruetruetruetruefalsefalsefalse

floatfalsefalsefalsefalsefalsetruetruetruetruetruefalsefalsefalse

doublefalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse

decimalfalsefalsefalsefalsefalsefalsefalsetruetruetruefalsefalsefalse

stringfalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse

varcharfalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse

tsfalsefalsefalsefalsefalsefalsefalsefalsetruetruetruefalsefalse

datefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsetruefalse

binaryfalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetrue

注:由于表格比较大,这里对一些比较长的字符串进行缩写,ts是timestamp的缩写,bl是boolean的缩写,sl是smallint的缩写,dm是decimal的缩写,vc是varchar的缩写,ba是binary的缩写。

我们可以用CAST来显式的将一个类型的数据转换成另一个数据类型。如何使用?CAST的语法为cast(value AS TYPE)。举个例子:假如我们一个员工表employees,其中有name、salary等字段;salary是字符串类型的。有如下的查询: SELECT name, salary FROM employees

WHERE cast(salary AS FLOAT) < 100000.0;

这样salary将会显示的转换成float。如果salary是不能转换成float,这时候cast将会返回NULL!

对cast有一下几点需要说明的:如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,而不是通过cast实现!

对于BINARY类型的数据,只能将BINARY类型的数据转换成STRING类型。如果你确信BINARY类型数据是一个数字类型(a number),这时候你可以利用嵌套的cast操作,比如a是一个BINARY,且它是一个数字类型,那么你可以用下面的查询:SELECT (cast(cast(a as string) as double)) from src;

我们也可以将一个String类型的数据转换成BINARY类型。

对于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的字符串。

hive把字符串转换为时间_Hive数据类型转换相关推荐

  1. hive把字符串转换为时间_关于hive的时间转换

    Wendy_Jacky 把时间(201704271211)中的每一部分都取出来,然后再拼成目标字符串(2017-04-27 12:11).代码如下:#include   // for sprintf, ...

  2. c语言 date转string,c如何将字符串转换为时间格式

    1.C语言中 有没有函数可以将字符串直接转为时间格式的 由于实际生活中,字符串形式的时间有可能有多种形式,比如月日年,或年月日,中间的分隔符也可能有所不同.所以C语言并没有提供此类的转换函数. 如果有 ...

  3. postgresql数据库的 to_date 和 to_timestamp 将 字符串转换为时间格式

    数据库中:字符串 转换为 时间格式 二者区别: to_data 转换为 普通的时间格式         to_timestamp 转换可为 时间戳格式 出错场景: 比较同一天 日期大小的时候,很容易出 ...

  4. android 字符串时间,Android:将字符串转换为时间

    我想将包含时间戳的字符串转换为与android的RelativeDateTimeString一致的时间,所以我可以将其格式化为相对时间.时间戳,我得到的都是这种格式:Android:将字符串转换为时间 ...

  5. python类型转换astype时间_Pandas数据类型转换的几个小技巧

    利用Pandas进行数据分析时,确保使用正确的数据类型是非常重要的,否则可能会导致一些不可预知的错误发生.笔者使用Pandas已经有一段时间了,但是还是会在一些小问题上犯错误,追根溯源发现在对数据进行 ...

  6. php 字符串0转换bool_PHP数据类型转换(转)

    PHP数据类型转换 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: •(int).(integer):转换成整形 •(float).(double).(real):转换成浮点型 •(s ...

  7. hive 数字转换字符串_Hive数据类型转换

    写在前面的话,学<Hive的那些事>序列文章,分享给大家.我会在接下来的时间整理有关Hive的资料,如果对Hive的东西感兴趣,请关注本博客.https://www.iteblog.com ...

  8. Excel计算将时间字符串转换为时间格式 年-月-日 时:分:秒 且计算时间差得到 时分秒 格式

    Excel计算时间差时分秒 今天数据导出处理的时候碰见一个时间格式问题如下: 这个日期数据从数据库里导出来就是字符串了,由于取出来的还有一些很长的编码形式的字段怕被隐没,所以将数据粘贴之前我将exce ...

  9. c#中使用消息循环机制发送接收字符串的方法和数据类型转换

    在定义消息时忘记了用户可定义消息的边界值,在网上一阵疯找后来发现是const int WM_USER = 0x400.接着是SendMessage的lParam类型不能决定(默认是IntPtr),我想 ...

最新文章

  1. 【初窥javascript奥秘之事件机制】论“点透”与“鬼点击”
  2. matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图
  3. 蚂蚁中间件团队Java面试题:Netty+Redis+Kafka+MongoDB+分布式
  4. 写出漂亮代码的七种方法
  5. Codeforces - 1176E - Cover it! - bfs
  6. windows如何安装MySql(包含一些安装时问题的解决)
  7. 算法:判断对称树 101. Symmetric Tree
  8. 梯度下降(一)--机器学习
  9. 新型计算机病毒2017,【2017年整理】计算机病毒(修改好).ppt
  10. 聊天ai机器人_适用于您网站的14种最佳AI聊天机器人软件(已比较)
  11. 井字棋游戏 Matlab
  12. 搜狗站长平台 不用审核强制提交sitemap的方法
  13. 电脑Java安装 报错_Windows10系统电脑安装Java开发环境的方法
  14. 功能测试报告模板_接口测试用例和报告模板
  15. iOS中PCH文件的使用
  16. 去哪里下载SSL证书?
  17. OpenLayers 3实践与原理探究3-ol3一个完整的例子
  18. 谈谈数据结构的重要性
  19. iframe之嵌套方案总结
  20. 给函数取一个“好”名字

热门文章

  1. MW测试网紧急升级公告
  2. 第二期 开发板选型 《路由器就是开发板》
  3. 女人就像花一样,花朵总是需要被保护起来,如果你把花放到水沟里,它就会被损坏;如果你把花放到寺庙中,她就会被尊重;
  4. 这些数据库通用规约,你都遵守了吗?
  5. photoshop快速选择工具
  6. 【区块链】目前对区块链最通俗易懂的解释
  7. Java修真界(斗之气九段)
  8. python中标识符的命名规则_Python标识符和命名规则
  9. Linux中buff/cache内存占用过高解决办法
  10. Pandas 导出excel表取消表头与行号方法详解