VARCHAR 标量函数 (scalar function)
VARCHAR函数返回第一个参数指定的值的不同长度的字符串表示形式。
VARCHAR函数的语法取决于输入参数的数据类型。 接受以下类型的输入参数。
整数到字符串:
十进制转换为字符串:
浮点数转换为字符串:
十进制浮点数转换为Varchar:
字符到Varchar:
图形到字符串:
日期时间转换为字符串:
行ID转换为Varchar:
该模式是 SYSIBM。
VARCHAR函数返回一个长度可变的字符串,表示以下值之一:
- 如果第一个参数是SMALLINT、INTEGER或BIGINT,则为整数
- 如果第一个参数是十进制数,则返回十进制数
- 如果第一个参数是DOUBLE或REAL,则为双精度浮点数
- 如果第一个参数是 DECFLOAT,则为十进制浮点数
- 如果第一个参数是任何类型的字符串,则为字符串值
- 如果第一个参数是EBCDIC或Unicode图形字符串,则为图形字符串
- 如果第一个参数是日期、时间或时间戳,则为日期时间值
- 如果第一个参数是行ID,则返回行ID值
函数的结果是一个长度可变的字符串(VARCHAR)。
结果可以为空;如果第一个参数为空,则结果为空值。
- 整数到字符串
- 整数表达式
- 返回内置整数数据类型(SMALLINT、INTEGER、BIGINT)的值的表达式。
结果是以SQL整数常量形式表示的参数的字符串,字符串长度可变。 结果的实际长度是可用于表示参数值的最小字符数。 结果由n个字符组成,这些字符是有效数字,用于表示参数的值,如果参数为负数,则前面带有减号。 正数从数字开始。 不包括前导零。
- 如果参数是一个小整数,则结果的长度属性为6。
- 如果参数是一个大整数,则结果的长度属性为11。
- 如果参数是一个大整数,则结果的长度属性为20。
结果的 CCSID 按照字符串的编码方案和 CCSID 规则确定。
- 十进制转换为字符串
- 十进制表达式
- 返回内置十进制数据类型的值的表达式。 若要为表达式的值指定不同的精度和刻度,请在应用VARCHAR函数之前,先对表达式应用DECIMAL函数。
- 小数点
- 指定用于分隔结果字符串中十进制数字的单字节字符常量。 字符不能是数字、加号(+)、减号(-)或空格。 默认值为句点(.)或逗号(,)。有关选择因素的信息,请参阅小数点表示法。
结果为第一个参数的字符串表示形式,长度可变。 结果的实际长度是可用于表示结果的最小字符数,但包含末尾的零。 结果包括一个十进制字符和最多 p 位数字,其中 p 是十进制表达式的精度,如果参数为负数,则前面带有减号。 正数从数字或小数点开始。 不返回前导零。 如果十进制表达式的比例是零,则不返回小数点。
结果的精度为 2+p ,其中 p 是十进制表达式的精度。
1
结果的CCSID由应用程序编码方案决定。
- 浮点数转换为字符串
- 浮点表达式
- 返回内置浮点数据类型的值的表达式。
结果是以SQL浮点常数的形式表示参数的字符串,字符串的长度可变。 如果结果为负数,则第一个字符为负号;否则,第一个字符为数字。 如果参数为零,则结果为 0E0。
结果的长度属性为24。 结果的精确长度是能够表示参数值的最小字符数,使得尾数由一个非零的单个数字、一个句点和一系列数字组成。
结果的 CCSID 按照字符串的编码方案和 CCSID 规则确定。
- 十进制浮点数转换为Varchar
- 十进制浮点表达式
- 返回内置DECFLOAT数据类型的值的表达式。
结果是以SQL十进制浮点常数的形式表示参数的不同长度的字符串。
如果结果值为特殊值Infinity、 sNaN, 或 NaN, ,则分别返回字符串“INFINITY”、“SNAN”或“NAN”。 DECFLOAT的特殊值 sNaN 在转换为字符串时不会导致异常。
结果的长度属性为42。 结果的实际长度是表示参数值的最小字符数,包括符号、数字和句点。 尾随零很重要。 如果结果为负数,则结果的第一个字符为负号。 否则,第一个字符是数字,或者如果结果值为无穷大、 sNaN, 或 NaN ,则第一个字符是字母。
结果的 CCSID 按照字符串的编码方案和 CCSID 规则确定。
- 字符串到Varchar
- character-expression
- 返回内置字符数据类型的值的表达式。
- 整数
- 指定结果中可变长度字符串的长度属性。 数值必须在1到 32764 之间,以隐式或显式指定的单位表示。 如果未指定长度,则结果长度与字符表达式的长度相同。
如果指定了 CODEUNITS16、 CODEUNITS32 或 OCTETS,请参阅确定最终结果的长度属性 ,了解如何计算结果字符串的长度属性。
如果未指定长度属性,且字符表达式为空字符串常量,则结果的长度属性为1,结果为空字符串。 否则,结果的长度属性与第一个参数的长度属性相同。
- CODEUNITS16、 CODEUNITS32 或 OCTETS
- 指定用于表示整数的单位。 如果字符串表达式是一个定义为位数据的字符串,则不能指定 CODEUNITS16 和 CODEUNITS32。
- CODEUNITS16
- 指定整数以16位 UTF-16 代码单元表示。
- CODEUNITS32
- 指定整数以32位 UTF-32 代码单元表示。
- OCTETS
- 指定整数以字节为单位表示。
结果的实际长度是结果的长度属性与字符表达式的实际长度的最小值。 如果字符表达的长度大于结果的长度属性,则结果将被截断。 除非所有截断的字符都是适合字符表达的空格,否则会返回警告。
如果字符表达是位数据,那么结果也是位数据。 否则,结果的CCSID与字符表达的 CCSID相同。
- 图形到字符串
- 图形表达
- 返回内置图形数据类型的值的表达式。
- 整数
- 生成的变长图形字符串的长度属性。 数值必须在1-32704的范围内,以隐式或显式指定的单位表示。
如果指定了 CODEUNITS16 或 CODEUNITS32 ,请参阅确定最终结果的长度属性 ,了解如何计算结果字符串的长度属性。
如果未指定长度属性,则结果的长度属性按以下方式确定(其中 n 是第一个参数的长度属性):
- 如果图形表达式为空图形字符串常量,则结果的长度属性为1。
- 如果结果是SBCS数据,则结果长度为 n。
- 如果结果为混合数据,结果长度为
3*(length(graphic-expression)。
- CODEUNITS16 或者 CODEUNITS32
- 指定用于表示整数的单位。
- CODEUNITS16
- 指定整数以16位 UTF-16 代码单元表示。
- CODEUNITS32
- 指定整数以32位 UTF-32 代码单元表示。
结果的实际长度是结果的长度属性和图形表达的实际长度的最小值。 如果图形表达的长度大于结果的长度属性,则结果将被截断。 除非所有截断字符都是适合图形表达的空格,否则会返回警告。
结果的CCSID是字符混合CCSID,与图形表达的图形CCSID相对应。
- 日期时间转换为字符串
- 日期时间表达式
- 表达式的值具有以下三种内置数据类型之一:
- 日期
- 结果是以日期预编译器选项(如果提供)指定的格式或安装面板 DSNTIP4 上的字段“日期格式”指定的格式,以长度可变的字符串表示日期。 如果格式为本地格式,则安装面板上的字段“本地日期长度” DSNTIP4 指定结果的长度。 否则,结果的长度属性和实际长度为10。
LOCAL表示执行SQL语句的 Db2 的本地格式。 如果格式为本地,则必须在该 Db2 上安装时间退出程序。
如果指定了第二个参数,但该参数不是有效值,则会发生错误。
- 时间
- 结果是以TIME预编译器选项(如果提供)指定的格式,或者安装面板 DSNTIP4 上的字段TIME FORMAT指定的格式,以不同长度的字符串表示时间。 如果格式为本地格式,则安装面板 DSNTIP4 上的“本地时间长度”字段指定结果的长度。 否则,结果的长度属性和实际长度为8。
LOCAL表示执行SQL语句的 Db2 的本地格式。 如果格式为本地,则必须在该 Db2 上安装时间退出程序。
如果指定了第二个参数,但该参数不是有效值,则会发生错误。
- 时间戳记
- 结果就是带有时区的字符串时间戳。 第二个参数无需指定。
- 如果日期时间表达式是一个不含时区的 TIMESTAMP (0),则结果的长度为 19。
- 如果日期时间表达式是一个不带时区的 TIMESTAMP (p ),则结果的长度为 20+p ,其中 p 是时间戳的精度。 第二个参数无需指定。
- 如果日期时间表达式是带时区的 TIMESTAMP (0),则结果的长度为 25。
- 如果日期时间表达式是带时区的 TIMESTAMP (p ),则结果的长度为 26 +p ,其中 p 是时间戳的精度。 第二个参数无需指定
结果的CCSID由调用函数的上下文决定。 更多信息,请参阅字符串的编码方案和 CCSID 规则。
- 行ID到Varchar
- 行ID表达式
- 返回一个内置行ID数据类型的值的表达式。
结果为参数的变长字符串表示(VARCHAR)。 这是位数据。
结果的长度属性为40。 结果的实际长度为行ID表达式的长度。
注意
语法替代 : VARCHAR9 可作为VARCHAR的替代选项。 除了第一个参数是十进制数据时,函数的结果是相同的。
示例
SELECT VARCHAR(JOB)
INTO :JOB_DESC
FROM DSN8C10.EMP
WHERE LASTNAME = 'QUINTANA'; Function ... Returns ...
----------------------------------------------------------
VARCHAR(FIRSTNME,3,CODEUNITS32) 'Jür' -- x'4AC3BC72'
VARCHAR(FIRSTNME,3,CODEUNITS16) 'Jür' -- x'4AC3BC72'
VARCHAR(FIRSTNME,3,OCTETS) 'Jü' -- x'4AC3BC' 