Oracle - ODPS数据类型转换

前端之家收集整理的这篇文章主要介绍了Oracle - ODPS数据类型转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址

ODPS数据类型:

@H_403_11@类型

@H_403_11@描述

@H_403_11@取值范围

@H_403_11@Bigint

@H_403_11@8字节有符号整型。请不要使用整型的最小值 (-9223372036854775808),这是系统保留值。

@H_403_11@-9223372036854775807 ~ 9223372036854775807

@H_403_11@String

@H_403_11@字符串,支持UTF-8编码。其他编码的字符行为未定义。

@H_403_11@单个String列最长允许8MB。

@H_403_11@Boolean

@H_403_11@布尔型。

@H_403_11@True/False

@H_403_11@Double

@H_403_11@8字节双精度浮点数。

@H_403_11@-1.010308~ 1.010308

@H_403_11@Datetime

@H_403_11@日期类型。使用东八区时间作为系统标准时间。

@H_403_11@0001-01-01 00:00:00 ~ 9999-12-31 23:59:59

@H_403_11@decimal

@H_403_11@decimal类型支持null值,小数点前36位有效数字,小数点后18位有效数字。
正负无穷,不支持,如果计算结果为正负无穷,或超出decimal的值域时抛异常,绝对值小于最小可表达范围时,置0。

@H_403_11@-999999999999999999999999999999999999.999999999999999999 ~ 999999999999999999999999999999999999.999999999999999999
select '1',cast("999999999999999999999999999999999999.999999999999999999" as decimal) from dual;

oracle与ODPS的数据类型映射表

@H_502_318@ @H_403_11@NUMBER[ (p[,s]) ]

@H_403_11@Data Type

@H_403_11@Description

@H_403_11@ODPS

@H_403_11@转换到ODPS Desc

@H_403_11@VARCHAR2(size[BYTE|CHAR])

@H_403_11@VARCHAR2(1-4000)

@H_403_11@string

@H_403_11@单个String列最长允许8MBOralce12c最长的varchar(30000)约为30Kb,可以存储。但是如果文本不是需要分析的列,最好还是放在OSS中。

@H_403_11@NVARCHAR2(size)

@H_403_11@NVARCHAR2(1-4000)

@H_403_11@string

@H_403_11@单个String列最长允许8MB

@H_403_11@无小数位
19位以下:NUMBER(19,0)
36位以下:NUMBER(36,0)
有小数位

@H_403_11@p and s小于等于17,例如NUMBER(17,2)
p-s
小于等于36,s小于等于18,例如NUMBER(38,2)
其他

@H_403_11@无小数位

@H_403_11@bigint
decimal
有小数位
double
decimal
string

@H_403_11@考虑精度丢失情况,数值1.1在oracle存储和在ODPS存储必须完全相等。所以,这里的相等就是看到的数字全一致。无法对应的数据类型,只能存储为varchar。

@H_403_11@FLOAT[(p)]

@H_403_11@float(8)
其他

@H_403_11@double
参考number

@H_403_11@Float中的p指的是二进制的长度,最大可以到126。等同于NUMBER(38)。占22字节。所以,如果数据与NUMBER相同,请参考NUMBER对应关系。

@H_403_11@LONG

@H_403_11@最长可以到达2Gb长度的字符类型。

@H_403_11@

@H_403_11@建议数据存储在OSS

@H_403_11@DATE

@H_403_11@日期

@H_403_11@datetime

@H_403_11@因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。如果同步到ADS也要存储为日期,转为datetime类型。(oracle年的范围-4713+9999)

@H_403_11@BINARY_FLOAT

@H_403_11@32-bit floating point number. This data type requires 4 bytes.

@H_403_11@double

@H_403_11@ 等同于oracle的float(4),number(7)

@H_403_11@BINARY_DOUBLE

@H_403_11@64-bit floating point number. This data type requires 8 bytes.

@H_403_11@double

@H_403_11@ 等同于oracle的float(8),number(17)

@H_403_11@TIMESTAMP[(fractional_seconds_precision)]

@H_403_11@时间戳

@H_403_11@datetime

@H_403_11@因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。如果同步到ADS也要存储为日期,转为datetime类型。

@H_403_11@TIMESTAMP[(fractional_seconds_precision)]WITHTIMEZONE

@H_403_11@时间戳,带时区

@H_403_11@datetime

@H_403_11@因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。TIMEZONE特征丢失。

@H_403_11@TIMESTAMP[(fractional_seconds_precision)]WITHLOCALTIMEZONE

@H_403_11@时间戳,带时区

@H_403_11@datetime

@H_403_11@因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。TIMEZONE特征丢失。

@H_403_11@INTERVALYEAR[(year_precision)]TOMONTH

@H_403_11@ 

@H_403_11@bigint

@H_403_11@时间间隔无对应数据类型,建议转为秒

@H_403_11@INTERVALDAY[(day_precision)]TOSECOND[(fractional_seconds_precision)]

@H_403_11@ 

@H_403_11@bigint

@H_403_11@时间间隔无对应数据类型,建议转为秒

@H_403_11@RAW(size)

@H_403_11@RAW,类似于CHAR,声明方式RAW(L)L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。

@H_403_11@string

@H_403_11@string
Oracle
中RAW和Varchar2常用的两个转换函数
1. UTL_RAW.CAST_TO_RAW
函数按照缺省字符集,将VARCHAR2字符串转换为RAW。
insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));
2. UTL_RAW.CAST_TO_VARCHAR2
函数按照缺省字符集合,将RAW转换为VARCHAR2。
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;

@H_403_11@LONG RAW

@H_403_11@LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节

@H_403_11@ 

@H_403_11@建议数据存储在OSS

@H_403_11@ROWID

@H_403_11@行唯一识别字符串

@H_403_11@string

@H_403_11@物理ROWID(Physical Rowid)可以让我们快速的访问某些特定的行。只要行存在,它的物理ROWID就不会改变。高效稳定的物理ROWID在查询行集合、操作整个集合和更新子集是很有用的。例如,我们可以在UPDATE或DELETE语句的WHERE子句中比较UROWID变量和ROWID伪列来找出最近一次从游标中取出的行数据。

@H_403_11@UROWID[(size)]

@H_403_11@行唯一识别字符串的base-64编码

@H_403_11@string

@H_403_11@扩展ROWID使用检索出来的每一行记录的物理地址的base-64编码。ROWIDtochAR(),ROWIDtochAR()

@H_403_11@CHAR[(size[BYTE|CHAR])]

@H_403_11@定长字符串

@H_403_11@string

@H_403_11@string

@H_403_11@NCHAR[(size)]

@H_403_11@定长字符串

@H_403_11@string

@H_403_11@string

@H_403_11@CLOB

@H_403_11@字符型大字段数据类型

@H_403_11@

@H_403_11@建议数据存储在OSS

@H_403_11@NCLOB

@H_403_11@字符型大字段数据类型

@H_403_11@

@H_403_11@建议数据存储在OSS

@H_403_11@BLOB

@H_403_11@二进制型大字段数据类型

@H_403_11@

@H_403_11@建议数据存储在OSS

@H_403_11@BFILE

@H_403_11@二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。

@H_403_11@

@H_403_11@建议数据存储在OSS

原文地址


猜你在找的Oracle相关文章