支持的类型强制转换

本主题列出数据类型组合之间支持的 CAST。

并不是每种数据类型都支持 CAST。下面列出受支持的 CAST 及 CAST 的结果。

进行数据类型转换时,源数据类型和目标数据类型之间可能是一对一或多对一的映射。一对一映射的示例是源数据类型是一个整数,目标数据类型是一个浮点数。多对一映射的示例是由三个整数构成的源数据转换成一个日期。表 1 列出了支持的一对一类型强制转换。表 2 列出了支持的多对一类型强制转换。

请参阅 ESQL 数据类型,以获取关于 precisionscaleinterval qualifier 的信息。

表 1. 支持的类型强制转换:源到目标数据类型的一对一映射
源数据类型 目标数据类型 结果
BIT BIT 结果与输入相同。
BIT BLOB 位数组转换成最多为 263 个元素的字节数组。如果源没有适合的长度产生一个 BLOB(它是 8 的倍数),则报告一个错误。
BIT CHARACTER 结果是符合位串文字(其解释的值与源值相同)定义的字符串。结果字符串将具有格式 B'bbbbbb(其中 b 是 0 或 1)。

如果指定 CCSID 或 ENCODING 子句,则假设位数组是指定 CCSID 和编码中的字符,并且是转换为字符返回值的代码页。

如果仅指定 CCSID,则假设为大尾数法编码。

如果仅指定编码,则假设为 CCSID 1208。

如果代码页或编码未知、提供的数据不是代码页的整数个字符或数据包含在给定代码页中无效的字符,则此函数报告转换错误。

BIT INTEGER 位数组具有 263 个元素的最 大值,并转换为一个整数。如果源没有正确的长度匹配一个整数,则报告一个错误。
BLOB BIT 给定的位数组转换成最多为 263 个元素的位数组。
BLOB BLOB 结果与输入相同。
BLOB CHARACTER 结果是符合位二进制串文字(其解释的值与源值相同)定义的字符串。结果字符串将具有格式 X'hhhh'(其中 h 是任何十六进制字符)。

如果指定 CCSID 或 ENCODING 子句,则假设字节数组是指定 CCSID 和编码中的字符,并且是转换为字符返回值的代码页。

如果仅指定 CCSID,则假设为大尾数法编码。

如果仅指定编码,则假设为 CCSID 1208。

如果代码页或编码未知、提供的数据不是代码页的整数个字符或数据包含在给定代码页中无效的字符,则此函数报告转换错误。

BLOB INTEGER 字节数组具有 263 个元素的最大值,并转换为一个整数。如果源没有正确的长度匹配一个整数,则报告一个错误。
BOOLEAN BOOLEAN 结果与输入相同。
BOOLEAN CHARACTER 如果源值是 TRUE,则结果将是字符串 TRUE。如果源值是 FALSE,则结果将是字符串 FALSE。由于 UNKNOWN 布尔值与布尔值 NULL 相同,因此如果源值是 UNKNOWN,则结果是 NULL
CHARACTER BIT 字符串必须符合位字符串文字的规则或位字符串文字的内容。即,字符串可以为格式 B'bbbbbbb' 或 bbbbbb(其中 b' 可以是 0 或 1)。

如果指定 CCSID 或 ENCODING 子句,则字符串转换为指定的 CCSID 和编码,并放置它而不进一步转换为位数组返回值。

如果仅指定 CCSID,则假设为大尾数法编码。

如果仅指定编码,则假设为 CCSID 1208。

如果代码页或编码未知,或者数据包含无法转换为给定代码页的 Unicode 字符,则该函数会报告转换错误。

更新开始CHARACTER更新结束 更新开始BLOB更新结束 更新开始这种强制类型转换可采用两种方式进行:
  1. 如果您指定 CCSID 或 ENCODING 子句,则在代码页中或在您请求的编码中写出整个字符串。例如,CCSID 850 中的字符串“Cat”成为十六进制中的三字节数组,43,61,74。
  2. 如果您既不指定 CCSID 也不指定 ENCODING 子句,字符串自身必须包含两字符的十六进制数字,格式为 X'hhhhhh' 或 hhhhhh(其中 h 可以是任何十六进制字符)。在这种情况下,输入字符串“436174”就成为同样的三字节二进制数组 (43,61,74)。

    注意,如果输入字符串的格式不正确,则会生成错误。

如果仅指定 CCSID,则假设为大尾数法编码。

如果仅指定编码,则假设为 CCSID 1208。

如果代码页或编码未知,或者数据包含无法转换为给定代码页的 Unicode 字符,则该函数会报告转换错误。

更新结束
CHARACTER BOOLEAN 解释字符串的方法与解释布尔文字的方法相同。即,字符串必须是字符串 TRUE、FALSE 或 UNKNOWN(以任何大小写组合)中的一个。
CHARACTER CHARACTER 结果与输入相同。
CHARACTER DATE 如果未指定 FORMAT 子句,则字符串必须符合日期文字或日期字符串的规则。即,字符串可以是 DATE '2002-10-05' 或 2002-10-05。

另见将 dateTime 格式化和解析为字符串

CHARACTER DECIMAL 解释字符串的方法与解释确切数字文字的方法相同,以形成一个临时小数结果,其带有字符串格式定义的 scaleprecision。它转换为指定 precisionscale 的小数,如果转换导致有效数字丢失,则生成运行时错误。

如果不指定精度小数位,则若要保持给定值,至少需要结果的精度小数位

如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串

CHARACTER FLOAT 解释字符串的方法与解释浮点文字的方法相同。

如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串

CHARACTER GMTTIME 字符串必须符合 GMT 时间文字或时间字符串的规则。即,字符串可以是 GMTTIME '09:24:15 或 09:24:15。

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

CHARACTER GMTTIMESTAMP 字符串必须符合 GMT 时间戳记文字或时间戳记字符串的规则。即,字符串可以是 GMTTIMESTAMP '2002-10-05 09:24:15' 或 2002-10-05 09:24:15。

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

CHARACTER INTEGER 解释字符串的方法与解释整数文字的方法相同。

如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串

CHARACTER INTERVAL 字符串必须符合其时间间隔文字与 CAST 函数中指定的 interval qualifier 相同的规则,或者它必须符合适用于指定的 interval qualifier 的时间间隔字符串的规则。
CHARACTER TIME 字符串必须符合时间文字的规则或时间字符串的规则。即,字符串可以是 TIME '09:24:15 或 09:24:15。

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

CHARACTER TIMESTAMP 字符串必须符合时间戳记文字的规则或时间戳记字符串的规则。即,字符串可以是 TIMESTAMP '2002-10-05 09:24:15' 或 2002-10-05 09:24:15。

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

DATE CHARACTER 结果是符合日期文字(其解释的值与源日期值相同)定义的字符串。
例如:
CAST(DATE '2002-10-05' AS CHARACTER)
返回
DATE '2002-10-05'

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

DATE DATE 结果与输入相同。
DATE GMTTIMESTAMP 结果是一个从源日期值获得日期字段,从当前 GMT 时间获得时间字段的值。
DATE TIMESTAMP 结果是一个从源日期值获得日期字段,从当前时间获得时间字段的值。
DECIMAL CHARACTER 结果是符合确切数字文字定义并且其解释的值是小数值的最短字符串。

如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串

DECIMAL DECIMAL

该值转换为指定 precisionscale,如果转换导致有效数字丢失,则生成运行时错误。如果未指定 precisionscale,则值(保留 precisionscale)是 NOOP(没有操作)。

DECIMAL FLOAT 若有必要,舍入地转换此数。
DECIMAL INTEGER

舍入该值并将其转换为一个整数,如果该转换会导致有效数字丢失,则生成运行时错误。

DECIMAL INTERVAL 如果所指定的间隔限定符只有一个字段,则结果是带有该限定符(其字段等于确切数字的值)的间隔。否则,生成运行时错误。
FLOAT CHARACTER 结果是符合近似数字文字定义、尾数由非 0 的单个数字组成、后跟一个句点和一个无符号的整数,并且解释的值是浮点值的最短字符串。

如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串

FLOAT FLOAT 结果与输入相同。
FLOAT DECIMAL

舍入该值,并转换为指定 precisionscale 的小数,如果转换导致有效数字丢失,则生成运行时错误。如果不指定精度小数位,则若要保持给定值,至少需要结果的精度小数位

FLOAT INTEGER

舍入该值并将其转换为一个整数,如果该转换会导致有效数字丢失,则生成运行时错误。

FLOAT INTERVAL 如果指定的 interval qualifier 只有一个字段,则结果是一个带有限定符(其字段等于确切的数字值)的时间间隔。否则,生成运行时错误。
GMTTIME CHARACTER 结果是符合 GMTTIME 文字(其解释的值与源值相同)定义的字符串。结果字符串具有格式 GMTTIME 'hh:mm:ss'。

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

GMTTIME GMTTIME 结果与输入相同。
GMTTIME TIME 结果值是源值加本地时区时差(由 LOCAL_TIMEZONE 返回)。以 24 为模来计算小时字段。
GMTTIME GMTTIMESTAMP 结果是一个从当前日期获得日期字段,从源 GMT 时间获得时间字段的值。
GMTTIME TIMESTAMP 结果是一个从当前日期获得日期字段,从源 GMT 时间获得时间字段并加本地时区时差(由 LOCAL_TIMEZONE 返回)的值。
GMTTIMESTAMP CHARACTER 结果是符合 GMTTIMESTAMP 文字(其解释的值与源值相同)定义的字符串。结果字符串具有格式 GMTTIMESTAMP 'yyyy-mm-dd hh:mm:ss'。

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

GMTTIMESTAMP DATE 结果是字段由源 GMTTIMESTAMP 值的日期字段构成的值。
GMTTIMESTAMP GMTTIME 结果是字段由源 GMTTIMESTAMP 值的时间字段构成的值。
GMTTIMESTAMP TIME 结果是一个从源 GMTTIMESTAMP 值获得时间字段并加上本地时区时差(由 LOCAL_TIMEZONE 返回)的值。以 24 为模来计算小时字段。
GMTTIMESTAMP GMTTIMESTAMP 结果与输入相同。
GMTTIMESTAMP TIMESTAMP 结果值是源值加本地时区时差(由 LOCAL_TIMEZONE 返回)。
INTEGER BIT 给定的整数转换成最多为 263 个元素的位数组。
INTEGER BLOB 给定的整数转换成最多为 263 个元素的字节数组。
INTEGER CHARACTER 结果是符合确切数字文字定义并且其解释的值是整数值的最短字符串。

如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串

INTEGER FLOAT 若有必要,舍入地转换此数。
INTEGER INTEGER 结果与输入相同。
INTEGER DECIMAL

该值转换为指定 precisionscale 的小数,如果转换导致有效数字丢失,则生成运行时错误。如果不指定精度小数位,则若要保持给定值,至少需要结果的精度小数位

INTEGER INTERVAL 如果所指定的间隔限定符只有一个字段,则结果是带有该限定符(其字段等于确切数字的值)的间隔。否则,生成运行时错误。
INTERVAL CHARACTER 结果是符合 INTERVAL 文字(其解释的值与源间隔值相同)定义的字符串。
例如:
CAST(INTERVAL '4' YEARS AS CHARACTER)
返回
INTERVAL '4' YEARS
INTERVAL DECIMAL

如果时间间隔值具有一个只有一个字段的限定符,则结果是具有该值的指定 precisionscale 的小数,如果转换结果丢失有效数字,则生成运行时错误。如果间隔有一个具有多个字段的限定符,如 YEAR TO MONTH,则生成运行时错误。如果不指定精度小数位,则若要保持给定值,至少需要结果的精度小数位

INTERVAL FLOAT 如果时间间隔值有一个只有一个字段的限定符,则结果是带有该值的浮点数。如果间隔有一个具有多个字段的限定符,如 YEAR TO MONTH,则生成运行时错误。
INTERVAL INTEGER

如果间隔值有一个限定符(其只有一个字段),则结果是带有该值的整数。如果间隔有一个具有多个字段的限定符,如 YEAR TO MONTH,则生成运行时错误。

INTERVAL INTERVAL 结果与输入相同。

年-月时间间隔只能转换为年-月时间间隔,天-秒时间间隔只能转换为天-秒时间间隔。源时间间隔转换为以目标 interval qualifier 的最小有效字段为单元的标量。此值规格化具有目标 interval qualifier 的时间间隔。例如,要将具有限定符 MINUTE TO SECOND 的间隔转换为一个具有限定符 DAY TO HOUR 的间隔,将源值转换为以小时为单位的标量,并且将该值规格化为具有限定符 DAY TO HOUR 的间隔。

TIME CHARACTER 结果是符合 TIME 文字(其解释的值与源时间值相同)定义的字符串。
例如:
CAST(TIME '09:24:15' AS CHARACTER)
返回
TIME '09:24:15'

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

TIME GMTTIME 结果值是源值减去本地时区时差(由 LOCAL_TIMEZONE 返回)。以 24 为模来计算小时字段。
TIME GMTTIMESTAMP 结果是一个从当前日期获得日期字段,从源 GMT 时间获得时间字段并减去本地时区时差(由 LOCAL_TIMEZONE 返回)的值。
TIME TIME 结果与输入相同。
TIME TIMESTAMP 结果是其日期字段从当前日期获取并且其时间字段从源时间值获取的值。
TIMESTAMP CHARACTER 结果是符合 TIMESTAMP 文字(其解释的值与源时间戳记值相同)定义的字符串。
例如:
CAST(TIMESTAMP '2002-10-05 09:24:15' AS CHARACTER)
返回
TIMESTAMP '2002-10-05 09:24:15'

如果指定 FORMAT 子句,则行为会改变。另见将 dateTime 格式化和解析为字符串

TIMESTAMP DATE 结果是其字段由源时间戳记值的日期字段组成的值。
TIMESTAMP GMTTIME 结果是一个从源 TIMESTAMP 值获得时间字段并减去本地时区时差(由 LOCAL_TIMEZONE 返回)的值。以 24 为模来计算小时字段。
TIMESTAMP GMTTIMESTAMP 结果值是源值减去本地时区时差(由 LOCAL_TIMEZONE 返回)。
TIMESTAMP TIME 结果是其字段由源时间戳记值的时间字段组成的值。
TIMESTAMP TIMESTAMP 结果与输入相同。
表 2. 支持的类型强制转换:源到目标数据类型的多对一映射
源数据类型 目标数据类型 结果
数字、数字、数字 DATE 按年、月和日的顺序从数字创建 DATE 值。舍入非整数值。
数字、数字、数字 TIME 按时、分和秒的顺序从数字创建 TIME 值。舍入小时和分钟的非整数值。
数字、数字、数字 GMTIME 按时、分和秒的顺序从数字创建 GMTTIME 值。舍入小时和分钟的非整数值。
数字、数字、数字、数字、数字、数字 TIMESTAMP 按年、月、日、时、分以及秒的顺序从数字创建 TIMESTAMP 值。舍入年、月、日、小时和分钟的非整数。
数字、数字、数字、数字、数字、数字 GMTTIMESTAMP 按年、月、日、时、分以及秒的顺序从数字创建 GMTIMESTAMP 值。舍入年、月、日、小时和分钟的非整数。
DATE、TIME TIMESTAMP 结果是具有给定 DATE 和 TIME 的 TIMESTAMP 值。
DATE、GMTTIME GMTIMESTAMP 结果是具有给定 DATE 和 GMTTIME 的 GMTTIMESTAMP 值。
数字、数字 INTERVAL YEAR TO MONTH 结果是 INTERVAL,第一个源是年,第二个源是月。舍入非整数值。
数字、数字 INTERVAL HOUR TO MINUTE 结果是 INTERVAL,第一个源是小时,第二个源是分钟。舍入非整数值。
数字、数字、数字 INTERVAL HOUR TO SECOND 结果是 INTERVAL,源分别为小时、分钟和秒。舍入小时和分钟的非整数值。
数字、数字 INTERVAL MINUTE TO SECOND 结果是 INTERVAL,源分别为分钟和秒。舍入非整分钟值。
数字、数字 INTERVAL DAY TO HOUR 结果是 INTERVAL,源分别为日和小时。舍入非整数值。
数字、数字、数字 INTERVAL DAY TO MINUTE 结果是 INTERVAL,源分别为日、小时和分钟。舍入非整数值。
数字、数字、数字、数字 INTERVAL DAY TO SECOND 结果是 INTERVAL,源分别为日、小时、分钟和秒。舍入非整日、小时和分钟值。
数值型 INTERVAL YEAR 结果是 INTERVAL,源为年,必要时进行舍入。
数值型 INTERVAL MONTH 结果是 INTERVAL,源为月,必要时进行舍入。
数值型 INTERVAL DAY 结果是 INTERVAL,源为日,必要时进行舍入。
数值型 INTERVAL HOUR 结果是 INTERVAL,源为小时,必要时进行舍入。
数值型 INTERVAL MINUTE 结果是 INTERVAL,源为分钟,必要时进行舍入。
数值型 INTERVAL SECOND 结果是 INTERVAL,源为秒。
相关概念
ESQL 概述
ESQL 数据类型
相关任务
正在开发 ESQL
相关参考
复杂 ESQL 函数
CAST 函数
隐式类型强制转换
来自外部源的值的数据类型
支持的代码页
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05680_