Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语言元素 » 常量

 

二进制文字

二进制文字是由数字 0-9 和大小写字母 A-F 组成的十六进制字符序列。将二进制数据作为文字输入时,必须在数据前面加上 0x(零,后面接个 x),该前缀右侧的位数应为偶数。例如,39 的十六进制等效值是 0027,以 0x0027 表示。

形式为 0x12345678 的十六进制常量被视为二进制字符串。0x 后可以添加的位数没有限制。

二进制文字有时也称为二进制常量。在 SQL Anywhere 中,更多地使用二进制文字这一术语。

转换至/自十六进制值

可以使用 CAST、CONVERT、HEXTOINT 和 INTTOHEX 函数将二进制字符串转换为整数。CAST 和 CONVERT 函数可将十六进制常量转换为 TINYINT、有符号和无符号的 32 位整数、有符号和无符号的 64 位整数、NUMERIC 等等。HEXTOINT 函数只将十六进制常量转换为有符号的 32 位整数。

CAST 函数的返回值不能超过 8 位。如果值超过 8 位,将返回一个错误。少于 8 位的值将在其左侧添零。例如,以下参数会返回值 -2,147,483,647:

SELECT CAST ( 0x0080000001 AS INT );

以下参数会返回错误,因为无法将 10 位数的值表示为有符号的 32 位整数:

SELECT CAST ( 0xff80000001 AS INT );

如果 HEXTOINT 函数的返回值可以表示为有符号的 32 位整数,则该值可以超过 8 位数。HEXTOINT 函数只接受由数字以及大写或小写字母 A-F 组成的字符串文字或字符串变量(带有或不带有 0x 前缀)。当从右侧数第 8 位数是数字 8-9 以及大写或小写字母 A-F 中的某一个时,或前面的前导数位都是大写或小写字母 F 时,则十六进制值表示负整数。

以下参数会返回值 -2、147、483、647:

SELECT HEXTOINT( '0xFF80000001' );
SELECT HEXTOINT( '0x80000001' );
SELECT HEXTOINT ( '0xFFFFFFFFFFFFFFFF80000001' );

以下参数会返回错误,因为该参数表示一个正整数值,而该值无法表示为有符号的 32 位整数:

SELECT HEXTOINT( '0x0080000001' );
另请参见