YashanDB CAST函数

CAST函数将expr的值转换为指定的数据类型,并按新的类型返回结果。

YashanDB支持如下情况的类型转换:

expr类型type_name
BOOLEANTINYINT、SMALLINT、INT、BIGINT、CHAR、VARCHAR、NCHAR、NVARCHAR
BIT除FLOAT、DOUBLE外的数值型、字符型数据
CHAR、VARCHAR除UDT外的所有数据类型
NCHAR、NVARCHAR除UDT、XMLTYPE外的所有数据类型
DATECHAR、VARCHAR、TIMESTAMP
FLOAT、DOUBLE除BIT外的数值型、字符型数据
NUMBER所有数值型、字符型
TIMESTAMP字符型数据、DATE
TINYINT、SMALLINT、INT、BIGINT所有数值型、字符型
INTERVAL YEAR TO MONTH字符型数据
INTERVAL DAY TO SECOND字符型数据
CLOB字符型数据、JSON、XMLTYPE
NCLOB字符型数据、JSON
BLOB字符型数据、JSON、RAW、UROWID
XMLTYPECHAR、VARCHAR
ROWID字符型数据、RAW、UROWID
UROWID字符型数据、RAW
JSON字符型数据、CLOB、BLOB、NCLOB、RAW
RAW字符型数据、CLOB、BLOB、NCLOB、UROWID

其中:

  • expr的内容需符合目标类型的格式要求。
  • expr的值不能超过目标类型的值域,如10000无法转换为TINYINT类型。
  • expr的值为NULL时,函数返回NULL。
  • 对于列存表中的LOB类型字段,若某行数据为行外存储,则无法使用本函数进行转换。
  • 当目标类型为BOOLEAN时,只有'TRUE'、'T'、'YES'、'Y'、'1'可转换为TRUE,'FALSE'、'F'、'NO、'N'、'0'可转换为FALSE,字符不分大小写。
  • 当NUMBER转换BIT时,函数将对NUMBER进行向下取整,且NUMBER数据的大小不能超过64位。
  • 当TIME转换DATE跟TIMESTAMPS时,取当天的日期来补齐年月日。

type_name

指定要转换的目标类型,可同时指定size、scale、precision。

若目标类型为字符型数据时,可以指定其size,若expr为字符串类型且长度大于指定的size会截断,为其他类型超过指定的size,则转换失败并返回Out of range错误。

若目标类型为CHAR或NCHAR时,且语句中未指定其size时,不需要关注需要转换的原始数据类型,其预估size长度默认为1。

若目标类型为VARCHAR时,且语句中未指定其size,将根据expr的类型对size进行预估。对于字符串类型,其预估size为原字符串长度;对于其他类型,其预估size为该类型转为字符串的长度。

若目标类型为NVARCHAR时,须在语句中指定其size,否则返回错误。

DEFAULT replace_expr ON CONVERSION ERROR

表示当对expr转换失败时,使用replace_expr值来进行转换。 replace_expr可以为NULL,字符串值和字面量,且必须能够转换为目标类型(转换类型支持,且转换内容符合格式要求)。

此语句可省略,则对expr转换失败时函数返回错误。

当expr的数据类型为BIT、LOB类型,或者type_name为BIT、LOB类型时,不允许指定此语句。

示例

SELECT CAST('345' AS FLOAT) cast1,
CAST('345.2345' AS NUMBER(6,2)) cast2,
CAST('345a' AS INT DEFAULT '' ON CONVERSION ERROR) cast3,
CAST(SYSTIMESTAMP AS CHAR(100)) cast4
FROM DUAL;
      CAST1     CAST2    CAST3 CAST4                     
----------- --------- -------- ---------------------------
  3.45E+002    345.23          2022-01-09 17:52:30.634370

SELECT CAST('abcdef' AS CHAR) cast1,
CAST(1.23456 AS VARCHAR) cast2,
CAST(NULL AS CHAR) cast3,
CAST(NULL AS VARCHAR) cast4
FROM DUAL;
CAST1 CAST2     CAST3 CAST4 
----- --------- ----- ----- 
a     1.23456     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值