本主题列出数据类型组合之间支持的 CAST。
并不是每种数据类型都支持 CAST。下面列出受支持的 CAST 及 CAST 的结果。
进行数据类型转换时,源数据类型和目标数据类型之间可能是一对一或多对一的映射。一对一映射的示例是源数据类型是一个整数,目标数据类型是一个浮点数。多对一映射的示例是由三个整数构成的源数据转换成一个日期。表 1 列出了支持的一对一类型强制转换。表 2 列出了支持的多对一类型强制转换。
请参阅 ESQL 数据类型,以获取关于 precision、scale 和 interval qualifier 的信息。
源数据类型 | 目标数据类型 | 结果 |
---|---|---|
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 字符,则该函数会报告转换错误。 |
![]() ![]() |
![]() ![]() |
![]()
如果仅指定 CCSID,则假设为大尾数法编码。 如果仅指定编码,则假设为 CCSID 1208。 如果代码页或编码未知,或者数据包含无法转换为给定代码页的 Unicode 字符,则该函数会报告转换错误。 ![]() |
CHARACTER | BOOLEAN | 解释字符串的方法与解释布尔文字的方法相同。即,字符串必须是字符串 TRUE、FALSE 或 UNKNOWN(以任何大小写组合)中的一个。 |
CHARACTER | CHARACTER | 结果与输入相同。 |
CHARACTER | DATE | 如果未指定 FORMAT 子句,则字符串必须符合日期文字或日期字符串的规则。即,字符串可以是 DATE '2002-10-05' 或 2002-10-05。 |
CHARACTER | DECIMAL | 解释字符串的方法与解释确切数字文字的方法相同,以形成一个临时小数结果,其带有字符串格式定义的 scale 和 precision。它转换为指定 precision 和 scale 的小数,如果转换导致有效数字丢失,则生成运行时错误。 如果不指定精度和小数位,则若要保持给定值,至少需要结果的精度和小数位。 如果指定 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 | 该值转换为指定 precision 和 scale,如果转换导致有效数字丢失,则生成运行时错误。如果未指定 precision 和 scale,则值(保留 precision 和 scale)是 NOOP(没有操作)。 |
DECIMAL | FLOAT | 若有必要,舍入地转换此数。 |
DECIMAL | INTEGER | 舍入该值并将其转换为一个整数,如果该转换会导致有效数字丢失,则生成运行时错误。 |
DECIMAL | INTERVAL | 如果所指定的间隔限定符只有一个字段,则结果是带有该限定符(其字段等于确切数字的值)的间隔。否则,生成运行时错误。 |
FLOAT | CHARACTER | 结果是符合近似数字文字定义、尾数由非 0 的单个数字组成、后跟一个句点和一个无符号的整数,并且解释的值是浮点值的最短字符串。 如果指定 FORMAT 子句,则行为会改变。另见将数字格式化并解析为字符串。 |
FLOAT | FLOAT | 结果与输入相同。 |
FLOAT | DECIMAL | 舍入该值,并转换为指定 precision 和 scale 的小数,如果转换导致有效数字丢失,则生成运行时错误。如果不指定精度和小数位,则若要保持给定值,至少需要结果的精度和小数位。 |
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 | 该值转换为指定 precision 和 scale 的小数,如果转换导致有效数字丢失,则生成运行时错误。如果不指定精度和小数位,则若要保持给定值,至少需要结果的精度和小数位。 |
INTEGER | INTERVAL | 如果所指定的间隔限定符只有一个字段,则结果是带有该限定符(其字段等于确切数字的值)的间隔。否则,生成运行时错误。 |
INTERVAL | CHARACTER | 结果是符合 INTERVAL 文字(其解释的值与源间隔值相同)定义的字符串。 例如:
CAST(INTERVAL '4' YEARS AS CHARACTER)返回 INTERVAL '4' YEARS |
INTERVAL | DECIMAL | 如果时间间隔值具有一个只有一个字段的限定符,则结果是具有该值的指定 precision 和 scale 的小数,如果转换结果丢失有效数字,则生成运行时错误。如果间隔有一个具有多个字段的限定符,如 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 | 结果与输入相同。 |
源数据类型 | 目标数据类型 | 结果 |
---|---|---|
数字、数字、数字 | 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,源为秒。 |