VARGRAPHIC 标量函数 (scalar function)

VARGRAPHIC函数返回第一个参数的变长图形字符串表示形式。

更改开始

整数到变量图表的语法

FL 502

阅读语法图跳过可视化语法图VARGRAPHIC( 整数表达式)
更改结束
更改开始

十进制到变量的语法

FL 502

阅读语法图跳过可视化语法图VARGRAPHIC( 十进制表达式,小数点)
更改结束
更改开始

浮点到变量图的语法

FL 502

阅读语法图跳过可视化语法图VARGRAPHIC( 浮点表达式)
更改结束
更改开始

十进制浮点至变量图的语法

FL 502

阅读语法图跳过可视化语法图VARGRAPHIC( 十进制浮点表达式)
更改结束

字符到变量的语法:

阅读语法图跳过可视化语法图VARGRAPHIC( 性格表达,整数,CODEUNITS16CODEUNITS32)

图形到矢量图的语法:

阅读语法图跳过可视化语法图VARGRAPHIC( 图形表达,整数,CODEUNITS16CODEUNITS32)

该模式是 SYSIBM。

图形函数返回一个长度可变的图形字符串,表示:

  • 更改开始FL 502 如果第一个参数是SMALLINT、INTEGER或BIGINT,则为整数更改结束
  • 更改开始FL 502 如果第一个参数是十进制数,则返回十进制数更改结束
  • 更改开始FL 502 如果第一个参数是DOUBLE或REAL,则为双精度浮点数更改结束
  • 更改开始FL 502 如果第一个参数是 DECFLOAT,则为十进制浮点数更改结束
  • 如果第一个参数是任意类型的字符串,则为字符串
  • 如果第一个参数是EBCDIC或Unicode图形字符串,则为图形字符串

结果可以为空;如果第一个参数为空,则结果为空值。

由于结果是一个图形字符串,因此结果的长度属性和实际长度以双字节字符为单位。

更改开始

从整数到变量

FL 502

整数表达式
返回值为整数数据类型(SMALLINT、INTEGER或BIGINT)的表达式。

结果是以SQL整数常量形式呈现的参数的图形字符串,长度可变。 结果的实际长度是可用于表示参数值的最小字符数。 结果由n个字符组成,这些字符是有效数字,用于表示参数的值,如果参数为负数,则前面带有减号。 正数从数字开始。 不包括前导零。

  • 如果参数是一个小整数,则结果的长度属性为6。
  • 如果参数是一个大整数,则结果的长度属性为11。
  • 如果参数是一个大整数,则结果的长度属性为20。

计算结果为1200( UTF-16 )。

更改结束
更改开始

十进制到vargraphic

FL 502

十进制表达式
返回内置十进制数据类型的值的表达式。 如果需要不同的精度和比例,可以使用 DECIMAL 标量函数进行更改。 若要为表达式的值指定不同的精度和刻度,请在应用VARGRAPHIC函数之前应用DECIMAL函数。
小数点
指定用于分隔结果图形字符串中十进制数字的单字节字符常量。 字符不能是数字、加号(+)、减号(-)或空格。 默认值为句点(.)或逗号(,)。有关选择因素的信息,请参阅小数点表示法。

结果为第一个参数的图形字符串表示,长度可变。 结果的实际长度是可用于表示结果的最小字符数,但包含末尾的零。 结果包括一个十进制字符和最多 p 位数字,其中 p十进制表达式的精度,如果参数为负数,则前面带有减号。 正数从数字或小数点开始,且至少包含一个尾随空格。 不返回前导零。 如果十进制表达式的比例是零,则不返回小数点。 如果结果中的字节数小于定义的结果长度,则结果将在右侧用空格补齐。

结果的长度为 2+p ,其中 p小数表达式的精度。

计算结果为1200( UTF-16 )。

更改结束
更改开始

浮点到矢量

FL 502

浮点表达式
返回浮点数据类型(DOUBLE或REAL)的表达式。

结果是以SQL浮点常数的形式,以长度可变的图形字符串表示参数。 如果结果为负数,则第一个字符为负号;否则,第一个字符为数字。 如果参数为零,则结果为 0E0。

结果的长度为24。 结果的实际长度包括可以表示参数值的最小字符数,使得尾数由一个非零的单个数字、一个句点和一系列数字组成。 如果结果中的字符数少于24,则会在右侧用空格补齐。

计算结果为1200( UTF-16 )。

更改结束
更改开始

十进制浮点数转换为vargraphic

FL 502

十进制浮点表达式
返回一个内置十进制浮点数据类型(DECFLOAT)的值的表达式。

结果是以SQL十进制浮点常数的形式,以长度可变的图形字符串表示参数。

sNaN, NaN, 如果结果值为无穷大,则分别返回字符串“INFINITY”、“SNAN”和“NAN”。 DECFLOAT的特殊值 sNaN 在转换为字符串时不会导致异常。

结果的长度为42。 结果的实际长度是表示参数值的最小字符数,包括符号、数字和句点。 尾随零很重要。 如果结果为负数,则结果的第一个字符为负号。 否则,第一个字符是数字,或者如果DECFLOAT值为无穷大,则为字母, sNaN, 或 NaN。

计算结果为1200( UTF-16 )。

更改结束

字符到矢量图

character-expression
返回一个内置字符串数据类型的值的表达式,该数据类型包含一个EBCDIC编码或Unicode编码的字符串值。 它不可能是二进制数据。 论证中不必混合数据,但任何出现 X'0E'X'0F' 字符串中的任何出现都必须符合EBCDIC混合数据的规则。 (请参阅字符串了解这些规则。)
整数
生成的变长图形字符串的长度属性。 该值必须是介于1到16352之间的整数常数。

如果指定了 CODEUNITS16 或 CODEUNITS32 ,请参阅确定最终结果的长度属性 ,了解如何计算结果字符串的长度属性。

如果未指定整数 ,且字符表达式为空字符串常量或值为X'0E0F' ,则结果的长度属性为1,结果为空字符串。 否则,结果的长度属性与第一个参数的长度属性相同。

CODEUNITS16 或者 CODEUNITS32
指定用于表示整数的单位。 如果指定了 CODEUNITS16 或 CODEUNITS32 ,输入的是EBCDIC,而EBCDIC GRAPHIC数据没有对应的CCSID,就会发生错误。
CODEUNITS16
指定整数以16位 UTF-16 代码单元表示。
CODEUNITS32
指定整数以32位 UTF-32 代码单元表示。

有关 CODEUNITS16 和 CODEUNITS32 的更多信息,请参阅字符串单元规格

结果的实际长度是结果的长度属性与字符表达式的实际长度的最小值。 如果以单字节字符为单位计算的字符表达长度大于以双字节字符为单位计算的结果指定长度,则结果将被截断。 除非所有截断的字符都是适合字符表达的空格,否则会返回警告。

结果的CCSID是图形CCSID,与字符表达式的字符CCSID相对应。 如果输入为EBCDIC,且没有适用于EBCDIC GRAPHIC数据的系统CCSID,则结果的CCSID为 X'FFFE'

对于EBCDIC输入数据:

性格表达的每个特征决定了结果的特征。 在得出结果之前,可能需要将参数转换为混合数据的本地形式。 用M 表示混合数据的系统CCSID。 如果以下任一条件成立,则论证不成立:

  • 论证是混合数据,其CCSID为 M
  • 争论的焦点在于SBCS数据,其CCSID与SBCS数据的系统CCSID相同。 在这种情况下,操作过程与参数的CCSID 为M时相同。

否则,该参数是通过将字符转换为由M 标识的编码字符集而得到的新字符串S。 如果没有混合数据的系统CCSID,则转换为SBCS数据的系统CCSID所标识的编码字符集。

结果是通过 S 使用以下步骤得出的:

  • 每个字符( X'0E'X'0F' )被删除。
  • 每个双字节字符保持不变。
  • 每个单字节字符都被替换为双字节字符。

如果存在等效的双字节字符,则用等效的双字节字符替换单字节字符。 否则,替换为 X'FEFE'。 等价字符的存在取决于 M。 如果没有用于混合数据的 CCSID 系统,那么 EBCDIC 的 DBCS 等效字符串 X'xx' 就是 X'42xx' ,但 X'40' 除外,它的 DBCS 等效字符串是 X'4040'

对于Unicode输入数据:

性格表达的每个特征决定了结果的特征。 在得出结果之前,可能需要将参数转换为混合数据的本地形式。 用M 表示混合数据的系统CCSID。 如果以下任一条件成立,则论证不成立:

  • 论证是混合数据,其CCSID为 M
  • 争论点是SBCS数据,其CCSID与SBCS数据的系统CCSID相同。 在这种情况下,操作过程与参数的CCSID 为M时相同。

否则,该参数是通过将字符转换为由M 标识的编码字符集而得到的新字符串S

结果是通过 S 使用以下步骤得出的:

  • 每个非补充字符都由一个Unicode双字节字符( UTF-16 代码点)代替。 UTF-8 中不补充的字符在1-3字节之间。
  • 每个补充字符都由一对Unicode双字节字符(一对 UTF-16 代码点)代替。

如果存在等效的单字节字符,则用等效的Unicode字符替换。 否则,替换为 X'FFFD'

从图形到矢量图

图形表达
返回内置图形字符串数据类型值的表达式,该数据类型包含EBCDIC编码或Unicode编码的图形字符串值。
整数
生成的变长图形字符串的长度属性。 该值必须是介于1到16352之间的整数常数。

如果指定了 CODEUNITS16 或 CODEUNITS32 ,请参阅确定最终结果的长度属性 ,了解如何计算结果字符串的长度属性。

如果未指定整数 ,且图形表达式为空字符串常量,则结果的长度属性为1,结果为空字符串。 否则,结果的长度属性与第一个参数的长度属性相同。

CODEUNITS16 或者 CODEUNITS32
指定用于表示整数的单位。 如果指定了 CODEUNITS16 或 CODEUNITS32 ,输入的是EBCDIC,而EBCDIC GRAPHIC数据没有对应的CCSID,就会发生错误。
CODEUNITS16
指定整数以16位 UTF-16 代码单元表示。
CODEUNITS32
指定整数以32位 UTF-32 代码单元表示。

有关 CODEUNITS16 和 CODEUNITS32 的更多信息,请参阅字符串单元规格

结果的实际长度取决于图形表达中的字符数。 如果图形表达的长度超过指定长度,结果将被截断。 除非所有截断字符都是双字节空格,否则会返回警告。

结果的CCSID与图形表达的 CCSID相同。

更改开始

注意

FL 502 将数字数据转换为Unicode :当第一个参数为数字数据时,VARGRAPHIC函数的输出结果为Unicode( UTF-16 )。 VARGRAPHIC 函数仅当第一个参数为数字数据时才能调用,前提是包含的语句:
  • 引用 仅使用Unicode基本表或视图,且该语句符合单一编码方案语句的条件,或
  • 被视为多重编码方案声明,应用程序编码方案为Unicode。
更改结束

示例

更改开始
示例 1:

FL 502 假设存在一个EMPLOYEE_U表,该表与EMPLOYEE示例表类似,只是它是一个Unicode表。 EDLEVEL列定义为SMALLINT。 假设员工克里斯汀·哈斯(Christine Haas)在学校学习了18年。 以下语句将EDLEVEL列的值作为长度可变的图形字符串返回。

SELECT VARGRAPHIC(EDLEVEL)
 FROM EMPLOYEE_U
 WHERE LASTNAME = 'HAAS'

结果值为G'18'。

更改开始示例 2:更改结束
更改开始

FL 502 假设存在一个EMPLOYEE_U表,该表与EMPLOYEE示例表类似,只是它是一个Unicode表。 工资和佣金列定义为小数,精度为9,刻度为2。 假设员工克里斯汀·哈斯(Christine Haas)的工资为 52750.00 美元,佣金为 4220.00 美元。 使用逗号和小数点字符,以长度可变的图形字符串的形式返回员工克里斯汀·哈斯(Christine Haas)的工资和佣金总额。

SELECT VARGRAPHIC(SALARY + COMM, ',')
 FROM EMPLOYEE_U
 WHERE LASTNAME = 'HAAS'

结果值为G'56970.00'。

更改结束
更改结束