VARCHAR 标量函数

VARCHAR 函数返回不同数据类型的值的变长字符串表示。

二进制整数到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(integer-expression )

十进制到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(decimal-expression ,decimal-character )

浮点到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(floating-point-expression ,decimal-character )

十进制浮点数到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(decimal-floating-point-expression ,decimal-character )

字符串到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(character-expression ,integer)

图形字符串到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(graphic-expression ,integer)

二进制字符串到 VARCHAR

Read syntax diagramSkip visual syntax diagram VARCHAR ( binary-expression ,integer )

日期时间到 VARCHAR

Read syntax diagramSkip visual syntax diagramVARCHAR(datetime-expression ,ISOUSAEURJISLOCAL)

布尔值到 VARCHAR

Read syntax diagramSkip visual syntax diagram VARCHAR ( boolean-expression )

该模式是 SYSIBM。 在函数特征符中使用关键字时,不能将函数名指定为限定名。

二进制整数到 VARCHAR
整数表达式
返回整数数据类型 (SMALLINT , INTEGER 或 BIGINT) 的值的表达式。
结果是采用 SQL 整数常量形式的 integer-expression 的变长字符串表示。 结果的长度属性取决于 integer-expression 是小整数,大整数还是大整数,如下所示:
  • 如果第一个自变量是小整数,那么结果的最大长度为 6。
  • 如果第一个自变量是大整数,那么结果的最大长度为 11。
  • 如果第一个自变量是大整数,那么结果的最大长度为 20。

结果的实际长度是可用于表示自变量值的最小字符数。 不包含前导零。 如果自变量为负数,那么结果的第一个字符为减号。 否则,第一个字符是数字。

结果的代码页是该节的代码页。

十进制到 VARCHAR
十进制表达式
返回十进制数据类型的值的表达式。 DECIMAL 标量函数可用于更改精度和小数位。
十进制字符
指定用于对结果字符串中的十进制数字进行定界的单字节字符常量。 字符常量不能是数字,加号 (+) ,减号 (-) 或空格 (SQLSTATE 42815)。 缺省值为句点 (.) 字符。

结果是采用 SQL 十进制常量形式的 decimal-expression 的变长字符串表示。 结果的长度属性为 2 +p,其中 pdecimal-expression的精度。 结果的实际长度是可用于表示结果的最小字符数,但包含尾部零。 不包含前导零。 如果 decimal-expression 为负数,那么结果的第一个字符为减号; 否则,第一个字符为数字或十进制字符。 如果 decimal-expression 的小数位为零,那么不会返回十进制字符。

结果的代码页是该节的代码页。

浮点到 VARCHAR
浮点表达式
返回浮点数据类型 (DOUBLE 或 REAL) 的值的表达式。
十进制字符
指定用于对结果字符串中的十进制数字进行定界的单字节字符常量。 字符常量不能是数字,加号 (+) ,减号 (-) 或空格 (SQLSTATE 42815)。 缺省值为句点 (.) 字符。

结果是以 SQL 浮点常量的形式表示 浮点表达式 的变长字符串。

结果的最大长度为 24。 结果的实际长度是可以表示浮点表达式值的最小字符数,因此尾数由后跟 decimal-character 和一系列数字的非零个位数组成。 如果 浮点表达式 为负数,那么结果的第一个字符为减号; 否则,第一个字符为数字。 如果 浮点表达式 为零,那么结果为 0E0。

结果的代码页是该节的代码页。

十进制浮点数到 VARCHAR
decimal-浮点表达式
返回十进制浮点数据类型 (DECFLOAT) 的值的表达式。
十进制字符
指定用于对结果字符串中的十进制数字进行定界的单字节字符常量。 字符常量不能是数字,加号 (+) ,减号 (-) 或空格 (SQLSTATE 42815)。 缺省值为句点 (.) 字符。

结果是以 SQL 十进制浮点常量的形式表示 decimal-floatpoint-expression 的变长字符串。 结果的最大长度为 42。 结果的实际长度是可以表示 decimal-浮点表达式的值的最小字符数。 如果 decimal-浮点表达式 为负数,那么结果的第一个字符为减号; 否则,第一个字符为数字。 如果 decimal-浮点表达式 为零,那么结果为 0。

如果 "十进制浮点表达式的值是特殊值 Infinity、"sNaN,或 "NaN,,则将分别返回字符串 "无限、"SNAN和 "南网。 如果特殊值为负数,那么结果的第一个字符是减号。 十进制浮点特殊值sNaN转换为字符串时不会产生警告。

结果的代码页是该节的代码页。

字符串到 VARCHAR
character-expression
返回内置字符串数据类型的值的表达式。
integer
一个整数常量,用于指定生成的变长字符串的长度属性。 该值必须介于 0 与 之间,即 VARCHAR 数据类型的最大长度 (以结果的字符串为单位)。
如果未指定 第二个 参数:
  • 如果 character-expression 是空字符串常量,那么结果的长度属性为 0。
  • 否则,结果的长度属性为以下值中的较低值:
    • VARCHAR 数据类型的最大长度 (以结果的字符串单位为单位)
    • 第一个自变量的长度属性

结果是可变长度字符串。 结果的长度属性由 integer的值确定。 如果 character-expression 是 FOR BIT DATA 子类型,那么结果为 FOR BIT DATA。

如果 character-expression 的长度大于结果的长度属性,那么存在以下几种情况:
  • 如果结果的字符串单元是 CODEUNITS32,那么将执行截断。 如果仅截断空白字符,并且 character-expression 为 CHAR 或 VARCHAR ,那么不会返回警告。 否则,将返回警告 (SQLSTATE 01004)。
  • 如果指定了 integer ,那么将执行截断。 如果仅截断空白字符,并且 character-expression 为 CHAR 或 VARCHAR ,那么不会返回警告。 否则,将返回警告 (SQLSTATE 01004)。 当多字节字符的部分被截断时,该部分字符将被替换为空白字符。 请勿依赖此行为,因为它可能会在将来的发行版中发生更改。
  • 如果未指定 integer ,那么将返回错误 (SQLSTATE 22001)。
图形字符串到 VARCHAR
图形表达式
返回内置图形字符串数据类型的值的表达式。
integer
一个整数常量,用于指定生成的变长字符串的长度属性。 该值必须介于 0 与 之间,即 VARCHAR 数据类型的最大长度 (以结果的字符串为单位)。
如果未指定第二个自变量:
  • 如果 graphic-expression 是空字符串常量,那么结果的长度属性为 0。
  • 如果 graphic-expression 的字符串单元为 CODEUNITS32,那么结果的长度属性为以下值中的较低值:
    • VARCHAR 数据类型的最大长度 (以结果的字符串单位为单位)
    • 第一个自变量的长度属性
  • 否则,结果的长度属性为以下值中的较低值:
    • VARCHAR 数据类型的最大长度 (以结果的字符串单位为单位)
    • 第一个自变量的 3 * length 属性

结果是转换自 graphic-expression的变长字符串。 结果的长度属性由 integer的值确定。

如果转换为字符串的 graphic-expression 的长度大于结果的长度属性,那么存在以下几种情况:
  • 如果结果的字符串单元是 CODEUNITS32,那么将执行截断。 如果仅截断空白字符,并且 graphic-expression 为 GRAPHIC 或 VARGRAPHIC ,那么不会返回任何警告。 否则,将返回警告 (SQLSTATE 01004)。
  • 如果指定了 integer 并且 graphic-expression 是 GRAPHIC 或 VARGRAPHIC ,那么将执行截断而不返回警告。
  • 如果指定了 integer 并且 graphic-expression 是 DBCLOB ,那么将执行截断并返回警告 (SQLSTATE 01004)。
  • 如果未指定 integer ,并且 graphic-expression 是 GRAPHIC 或 VARGRAPHIC ,那么将执行截断而不返回警告。
  • 如果未指定 integer ,并且 graphic-expression 是 DBCLOB ,那么将返回错误 (SQLSTATE 22001)。
二进制字符串到 VARCHAR
二进制表达式
返回内置二进制字符串数据类型的值的表达式。
integer
一个整数常量,用于指定生成的变长字符串的长度属性。 该值必须介于 0 与 之间,即 VARCHAR 数据类型的最大长度 (以结果的字符串为单位)。

结果是 FOR BIT DATA 字符串。

日期时间到 VARCHAR
datetime-expression
具有下列其中一种数据类型的表达式:
日期
结果是以第二个自变量指定的格式表示日期的字符串。 结果的长度为 10。 如果指定了第二个自变量并且该自变量不是有效值,那么将返回错误 (SQLSTATE 42703)。
时间
结果是时间的字符串表示,采用第二个自变量指定的格式。 结果的长度为 8。 如果指定了第二个自变量并且该自变量不是有效值,那么将返回错误 (SQLSTATE 42703)。
TIMESTAMP
结果是时间戳记的字符串表示。 如果 datetime-expression 的数据类型为 TIMESTAMP (0) ,那么结果的长度为 19。 如果 datetime-expression 的数据类型为 TIMESTAMP (n) ,其中 n 介于 1 和 12 之间,那么结果的长度为 20 +n。 否则,结果的长度为 26。 不能指定第二个自变量 (SQLSTATE 42815)。

结果的代码页是该节的代码页。

布尔值到 VARCHAR
布尔表达式
返回布尔值 (TRUE 或 FALSE) 的表达式。 结果为 "TRUE" 或 "FALSE"。

结果

VARCHAR 函数返回以下内容的变长字符串表示:
  • 整数 (如果唯一参数是 SMALLINT , INTEGER 或 BIGINT 值)
  • 十进制数 (如果第一个自变量是 DECIMAL 值)
  • 双精度浮点数 (如果第一个自变量是浮点 (DOUBLE 或 REAL) 值)
  • 十进制浮点数 (如果第一个自变量是十进制浮点 (DECFLOAT) 值)
  • 字符串 (如果第一个自变量是字符串 (CHAR , VARCHAR 或 CLOB) 值)
  • 图形字符串 (仅适用于 Unicode 数据库) ,如果第一个自变量是图形字符串 (GRAPHIC , VARGRAPHIC 或 DBCLOB) 值
  • 日期时间值 (如果第一个自变量是日期时间 (DATE , TIME 或 TIMESTAMP) 值)
  • 布尔值 ("TRUE" 或 "FALSE") ,如果唯一参数是 BOOLEAN 值 (TRUE 或 FALSE)
在非 Unicode 数据库中,结果的字符串单元是 OCTETS。 否则,结果的字符串单位由第一个自变量的数据类型确定。
  • OCTETS ,如果第一个自变量是字符串或字符串单位为 OCTETS , CODEUNITS16或双字节的图形字符串。
  • CODEUNITS32,如果第一个自变量是字符串或字符串单位为 CODEUNITS32的图形字符串。
  • 由环境的缺省字符串单元确定 (如果第一个自变量不是字符串或图形字符串)。
在 Unicode 数据库中,通过多字节字符截断输出字符串时:
  • 如果输入是字符串,那么部分字符将替换为一个或多个空格
  • 如果输入是图形字符串,那么部分字符将替换为空字符串
请勿依赖于任何这些行为,因为它们可能会在将来的发行版中发生更改。

如果第一个自变量可以为空,那么结果可以为空。 如果第一个自变量为空,那么结果为空值。

注意

  • 提高应用程序的可移植性: 如果第一个自变量是数字,或者如果第一个自变量是字符串且指定了长度自变量,请使用 CAST 规范 而不是此函数来提高应用程序的可移植性。

示例

  • 示例 1: 使 EMPNO 变长,长度为 10。
       SELECT VARCHAR(EMPNO,10)
         INTO :VARHV
         FROM EMPLOYEE
  • 示例 2: 将定义为 VARCHAR (8) 的主变量 JOB_DESC 设置为 VARCHAR 等效于针对员工 Dolores Quintana 的作业描述 (即 JOB 列的值) ,定义为 CHAR (8)。
       SELECT VARCHAR(JOB)
         INTO :JOB_DESC
         FROM EMPLOYEE
         WHERE LASTNAME = 'QUINTANA'
  • 示例 3: EDLEVEL 列定义为 SMALLINT。 以下内容以变长字符串形式返回值。
       SELECT VARCHAR(EDLEVEL)
         FROM EMPLOYEE
         WHERE LASTNAME = 'HAAS'
    生成值 "18"。
  • 示例 4: SALARY 和 COMM 列定义为 DECIMAL ,精度为 9 ,小数位为 2。 使用逗号十进制字符返回员工 Haas 的总收入。
       SELECT VARCHAR(SALARY + COMM, ',')
         FROM EMPLOYEE
         WHERE LASTNAME = 'HAAS'
    生成值 "56970,00"。
  • 示例 5: 以下语句返回值为 "TRUE" 的数据类型为 VARCHAR 的字符串。
       values VARCHAR(3=3)
  • 示例 6: 以下语句返回值为 "FALSE" 的数据类型为 VARCHAR 的字符串。
       values VARCHAR(3>3)