YashanDB数据类型转换

本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C/SQL%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2.html

数据类型转换多发生在操作的输入类型与规定类型不一致,或一个表达式中包含多个不同数据类型的情况中,此时,可以通过隐式转换或显式转换来整合数据类型。

隐式转换(Implicit Data Conversion)


隐式转换表示在原始数据类型和目标数据类型不一致,且用户未指定类型转换函数时,YashanDB会运用一套转换规则来尝试转换数据类型,帮助用户降低SQL语句的编写难度,但如果超出了默认的转换范围,相应的SQL语句会报错。

以下场景中YashanDB默认进行隐式转换:

  • INSERT/UPDATE语句中,要插入的数据将被转换成目标列的类型。
  • 算术运算时,对参与运算的数据类型进行转换。
  • 比较运算中,参与运算的数据类型不一致时,进行转换。
  • 当向函数输入的参数为与定义不相符的数据类型时,该参数将先被隐式转换为可以接受的数据类型。
  • PL或接口程序中,Filter Condition使用绑定参数时,当输入的参数为与绑定列不相符的数据类型时,该参数将先被隐式转换为可以接受的数据类型。(绑定列为数值型时,输入参数将被执行向NUMBER类型的隐式转换)

执行隐式转换可能导致如下问题:

  • FLOAT/DOUBLE类型本身是不精确的数据类型,执行与它们之间的类型可能会导致精度差异。
  • 从TIMESTAMP转换为DATE,微秒会被舍弃。

下列表列示YashanDB支持的所有隐式转换:(列表示原始类型;行表示目标类型;✓表示支持转换,X表示不支持转换,–表示无需转换)

(1)

TINYINTSMALLINTINTBIGINTNUMBERFLOATDOUBLE字符型
TINYINT
SMALLINT
INT
BIGINT
NUMBER
FLOAT
DOUBLE
字符型
DATEXXXXXXX
TIMESTAMPXXXXXXX
YM_INTERVALXXXXXXX
DS_INTERVALXXXXXXX
TIMEXXXXXXX
BOOLEANXX✓①
BITXX
CLOBXXXXXXX
BLOBXXXXXXX
NCLOBXXXXXXX
XMLTYPEXXXXXXX✓②
RAWXXXXXXX
JSONXXXXXXX
ROWIDXXXXXXX
UROWIDXXXXXXX

(2)

DATETIMESTAMPYM_INTERVALDS_INTERVALTIMEBOOLEAN
TINYINTXXXXX
SMALLINTXXXXX
INTXXXXX
BIGINTXXXXX
NUMBERXXXXXX
FLOATXXXXXX
DOUBLEXXXXXX
字符型✓①
DATEXXXX
TIMESTAMPXXXX
YM_INTERVALXXXXX
DS_INTERVALXXXX
TIMEXXXX
BOOLEANXXXXX
BITXXXXX
CLOBXXXXXX
BLOBXXXXXX
NCLOBXXXXXX
XMLTYPEXXXXXX
RAWXXXXXX
JSONXXXXXX
ROWIDXXXXXX
UROWIDXXXXXX

(3)

BITCLOBBLOBNCLOBXMLTYPERAWJSONROWIDUROWID
TINYINTXXXXXX
SMALLINTXXXXXX
INTXXXXXX
BIGINTXXXXXX
NUMBERXXXXXX
FLOATXXXXXXX
DOUBLEXXXXXXX
字符型✓②
DATEXXXXXXXXX
TIMESTAMPXXXXXXXX
YM_INTERVALXXXXXXXXX
DS_INTERVALXXXXXXXXX
TIMEXXXXXXXXX
BOOLEANXXXXXXXX
BITXXXXXXXX
CLOBXXXXXX
BLOBXXXXX
NCLOBXXXXXX
XMLTYPEXXXXXXXX
RAWXXX
JSONXXXX
ROWIDXXXXXX
UROWIDXXXX
  • ① 仅支持特定字符串转换为BOOLEAN类型,具体请查阅布尔型

  • ② XMLTYPE类型仅支持与字符型中的CHAR和VARCHAR类型进行相互转换。

显式转换(Explicit Data Conversion)


显式转换是通过类型转换函数来清楚直言地指定转换的方向。相比隐式转换,显式转换可以使SQL语句更加容易理解,输出类型的可预测性更强。

下表举例列示YashanDB内置的一些类型转换函数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值