
# 二进制函数和运算符
#### 二进制运算符
\|\| 运算符执行连接。
#### 二进制函数
- length(binary) → bigint 返回binary的字节长度。
  ```
  select length(x'00141f');-- 3
  ```
  
- concat(binary1, ..., binaryN) → varbinary 将binary1，binary2，binaryN串联起来。这个函数返回与SQL标准连接符\|\|相同的功能。
  ```
  select concat(X'32335F',x'00141f'); -- 32 33 5f 00 14 1f
  ```
  
- to_base64(binary) → varchar 将binary编码为base64字符串表示。
  ```
  select to_base64(CAST('hello world' as binary)); -- aGVsbG8gd29ybGQ=
  ```
  
- from_base64(string) → varbinary 将base64编码的string解码为varbinary。
  ```
  select from_base64('helloworld'); --  85 e9 65 a3 0a 2b 95
  ```
  
- unbase64(string) → varbinary 将base64编码的string解码为varbinary。
  ```
  SELECT from_base64('helloworld'); --  85 e9 65 a3 0a 2b 95
  ```
  
- to_base64url(binary) → varchar 使用URL安全字符，将binary编码为base64字符串表示。
  ```
  select to_base64url(x'555555');  -- VVVV
  ```
  
- from_base64url(string) → varbinary 使用URL安全字符，将base64编码的string解码为二进制数据。
  ```
  select from_base64url('helloworld'); --  85 e9 65 a3 0a 2b 95
  ```
  
- to_hex(binary) → varchar 将binary编码为16进制字符串表示。
  ```
  select to_hex(x'15245F');  --  15245F
  ```
  
- from_hex(string) → varbinary 将16进制编码的string解码为二进制数据。
  ```
  select from_hex('FFFF'); --  ff ff
  ```
  
- to_big_endian_64(*bigint* ) → varbinary
  将bigint类型的数字编码为64位大端补码格式。
  ```
  select to_big_endian_64(1234);
            _col0          
  -------------------------
   00 00 00 00 00 00 04 d2 
  (1 row)
  ```
  
- from_big_endian_64(*binary* ) → bigint
  64位大端补码格式的二进制解码为bigint类型的数字。
  ```
  select from_big_endian_64(x'00 00 00 00 00 00 04 d2');
   _col0 
  -------
    1234 
  (1 row)
  ```
  
- to_big_endian_32(*integer* ) → varbinary
  将bigint类型的数字编码为32位大端补码格式。
  ```
  select to_big_endian_32(1999);
      _col0    
  -------------
   00 00 07 cf 
  (1 row)
  ```
  
- from_big_endian_32(*binary* ) → integer
  32位大端补码格式的二进制解码为bigint类型的数字。
  ```
  select from_big_endian_32(x'00 00 07 cf');
   _col0 
  -------
    1999 
  (1 row)
  ```
  
- to_ieee754_32(*real* ) → varbinary
  根据IEEE 754算法，将单精度浮点数编码为一个32位大端字节序的二进制块。
  ```
  select to_ieee754_32(3.14);
      _col0    
  -------------
   40 48 f5 c3 
  (1 row)
  ```
  
- from_ieee754_32(*binary* ) → real
  对采用IEEE 754单精度浮点格式的32位大端字节序binary进行解码。
  ```
  select from_ieee754_32(x'40 48 f5 c3');
   _col0 
  -------
    3.14 
  (1 row)
  ```
  
- to_ieee754_64(*double* ) → varbinary
  根据IEEE 754算法，将双精度浮点数编码为一个64位大端字节序的二进制块。
  ```
  select to_ieee754_64(3.14); 
   _col0          
  -------------------------
   40 09 1e b8 51 eb 85 1f 
  (1 row)
  ```
  
- from_ieee754_64(*binary* ) → double
  对采用IEEE 754单精度浮点格式的64位大端字节序binary进行解码。
  ```
  select from_ieee754_64(X'40 09 1e b8 51 eb 85 1f');
   _col0 
  -------
    3.14 
  (1 row)
  ```
  
- lpad(*binary* , *size* , *padbinary* ) → varbinary
  左填充二进制以使用padbinary调整字节大小。如果size小于二进制文件的长度，则结果将被截断为size个字符。size不能为负，并且padbinary不能为空。
  ```
  select lpad(x'15245F', 11,x'15487F') ; -- 15 48 7f 15 48 7f 15 48 15 24 5f
  ```
  
- rpad(*binary* , *size* , *padbinary* ) → varbinary
  右填充二进制以使用padbinary调整字节大小。如果size小于二进制文件的长度，则结果将被截断为size个字符。size不能为负，并且padbinary不能为空。
  ```
  SELECT rpad(x'15245F', 11,x'15487F'); -- 15 24 5f 15 48 7f 15 48 7f 15 48
  ```
  
- crc32(*binary* ) → bigint
  计算二进制块的CRC 32值。
  
- md5(*binary* ) → varbinary
  计算二进制块的MD 5哈希值。
  
- sha1(*binary* ) → varbinary
  计算二进制块的SHA 1哈希值。
  
- sha2(*string, integer* ) → string
  安全散列算法2， 是一种密码散列函数算法标准，其输出长度可以取224位，256位， 384位、512位，分别对应SHA-224、SHA-256、SHA-384、SHA512
  
- sha256(*binary* ) → varbinary
  计算二进制块的SHA 256哈希值。
  
- sha512(*binary* ) → varbinary
  计算二进制块的SHA 512哈希值。
  
- xxhash64(*binary* ) → varbinary
  计算二进制块的XXHASH 64哈希值。
  
- spooky_hash_v2_32(*binary* ) → varbinary
  计算二进制块的32位SpookyHashV2哈希值。
  
- spooky_hash_v2_64(*binary* ) → varbinary
  计算二进制块的64位SpookyHashV2哈希值。
  
- hmac_md5(*binary* , *key* ) → varbinary
  使用给定的key计算二进制块的HMAC值（采用md5）。
  
- hmac_sha1(*binary* , *key* ) → varbinary
  使用给定的key计算二进制块的HMAC值（采用sha1）。
  
- hmac_sha256(*binary* , *key* ) → varbinary
  使用给定的key计算二进制块的HMAC值（采用sha256）。
  
- hmac_sha512(*binary* , *key* ) → varbinary
  使用给定的key计算二进制块的HMAC值（采用sha512）。
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/notice_3.0-zh-cn.png)
  CRC32、MD5、SHA1算法在密码学场景已被攻击者破解，不建议应用于密码学安全场景。
  
 
