原文连接:https://www.iteblog.com/archives/892.html

《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内置的数据类型之间是否可以进行隐式的转换操作:

  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的缩写。

我们可以用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的字符串。

最新文章

  1. Delphi_05_Delphi_Object_Pascal_基本语法_03
  2. spring加载过程,源码带你理解从初始化到bean注入
  3. ReactNative——打包发布
  4. 原版ubuntu 系统下,emacs24无法输入中文问题解决方案
  5. CozyRSS开发记录5-订阅列表栏里的项
  6. JSON.stringify////////////////////////////////zzzzzzzzzzzzzz
  7. apache开启.htaccess
  8. Another app is currently holding the yum lock; waiting for it to exit...另一个应用程序在占用yum lock,等待其退出。
  9. JavaWeb基础: Tomcat
  10. Java(07)转化流
  11. CSS发抖
  12. KM算法小结
  13. Jquery中click事件重复执行的问题
  14. 代码阅读笔记:【C-COT】
  15. Alpha冲刺——day10
  16. 从零开始的四轴飞行器-开篇flag
  17. day11 细节记忆
  18. 从volatile说到i++的线程安全问题
  19. GO学习笔记 - 变量在定义时没有明确的初始化时会赋值为“零值 ”。
  20. 【转】如何将FLAC格式转为MP3格式

热门文章

  1. 用 Flask 来写个轻博客 (26) — 使用 Flask-Celery-Helper 实现异步任务
  2. [360前端星计划]BlackJack(21点)(纯JS,附总部学习笔记)
  3. void*和void类型
  4. javaScript Queue
  5. cf:c题
  6. ajax跨域请求,状态码200,F12控制台报错
  7. 容器下载的是centos8的镜像,scp出现packet_write_wait: Connection to **** port 22: Broken pipe 问题解决
  8. Python之复数、分数、大型数组数学运算(complex、cmath、numpy、fractions)
  9. c# 编程--方法(函数)
  10. 11.Container With Most Water (Array; Two-Pointers)