# 二进制字符串函数和操作符
#### 字符串操作符
SQL定义了一些字符串函数，在这些函数里使用关键字而不是逗号来分隔参数。
- octet_length(string) 描述：二进制字符串中的字节数。
  返回值类型：int
  示例：
  ```
  gaussdb=# SELECT octet_length(E'jo\\000se'::bytea) AS RESULT;
   result
  --------
        5
  (1 row)
  ```
  
- overlay(string placing string from int \[for int\]) 描述：替换子串。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT;
       result     
  ----------------
   \x5402036d6173
  (1 row)
  ```
  
- position(substring in string) 描述：特定子字符串的位置。
  返回值类型：int
  示例：
  ```
  gaussdb=# SELECT position(E'\\000om'::bytea in E'Th\\000omas'::bytea) AS RESULT;
   result
  --------
        3
  (1 row)
  ```
  
- substring(string \[from int\] \[for int\]) 描述：截取子串。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; 
    result  
  ----------
   \x68006f
  (1 row)
  ```
  
- substr(bytea \[from int\] \[for int\]) 描述：截取子串。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT substr(E'Th\\000omas'::bytea,2, 3) AS RESULT;
    result
  ----------
   \x68006f
  (1 row)
  ```
  
- trim(\[both\] bytes from string) 描述：从string的开头和结尾删除仅包含bytes中字节的最长字符串。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT;
    result  
  ----------
   \x546f6d
  (1 row)
  ```
  
 
#### 二进制字符串函数
GaussDB提供了函数调用所使用的常用语法。
- btrim(string bytea, bytes bytea) 描述：从string的开头和结尾删除仅包含bytes中字节的最长的字符串。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT;
     result   
  ------------
   \x7472696d
  (1 row)
  ```
  
- get_bit(string, offset) 描述：从字符串中抽取位。
  返回值类型：int
  示例：
  ```
  gaussdb=# SELECT get_bit(E'Th\\000omas'::bytea, 45) AS RESULT; 
   result
  --------
        1
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  第一个参数仅支持bit或bytea类型。
  
- get_byte(string, offset) 描述：从字符串中抽取字节。
  返回值类型：int
  示例：
  ```
  gaussdb=# SELECT get_byte(E'Th\\000omas'::bytea, 4) AS RESULT; 
   result
  --------
      109
  (1 row)
  ```
  
- set_bit(string, offset, newvalue) 描述：设置字符串中的位。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT set_bit(E'Th\\000omas'::bytea, 45, 0) AS RESULT; 
        result      
  ------------------
   \x5468006f6d4173
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  第一个参数仅支持bit或bytea类型。
  
- set_byte(string, offset, newvalue) 描述：设置字符串中的字节。
  返回值类型：bytea
  示例：
  ```
  gaussdb=# SELECT set_byte(E'Th\\000omas'::bytea, 4, 64) AS RESULT; 
        result      
  ------------------
   \x5468006f406173
  (1 row)
  ```
  
- rawcmp(raw, raw) 描述：raw数据类型比较函数。
  返回值类型：integer
  
- raweq(raw, raw) 描述：raw数据类型比较函数。
  返回值类型：boolean
  
- rawge(raw, raw) 描述：raw数据类型比较函数。
  返回值类型：boolean
  
- rawgt(raw, raw) 描述：raw数据类型比较函数。
  返回值类型：boolean
  
- rawin(cstring) 描述：raw数据类型解析函数。
  返回值类型：bytea
  
- rawle(raw, raw) 描述：raw数据类型解析函数。
  返回值类型：boolean
  
- rawlike(raw, raw) 描述：raw数据类型解析函数。
  返回值类型：boolean
  
- rawlt(raw, raw) 描述：raw数据类型解析函数。
  返回值类型：boolean
  
- rawne(raw, raw) 描述：比较raw类型是否相同。
  返回值类型：boolean
  
- rawnlike(raw, raw) 描述：比较raw类型与模式是否不匹配。
  返回值类型：boolean
  
- rawout(bytea) 描述：raw类型的输出接口。
  返回值类型：cstring
  
- rawsend(raw) 描述：转换bytea类型为二进制类型。
  返回值类型：bytea
  
- rawtohex(text) 描述：raw格式转换为十六进制。
  返回值类型：text
  
 
