
# 替换和填充字符串
#### lpad(string text, length int \[, fill text\])
描述：通过填充字符fill（缺省时为空白），把string填充为length长度。如果string已经比length长则将其尾部截断。
返回值类型：text
示例：
```
SELECT lpad('data', 8, 'xy');
   lpad
----------
 xyxydata
(1 row)
```
#### overlay(string placing string FROM int \[for int\])
描述：用指定的字符串替换原字符串中从指定位置开始的字符串部分，它可以灵活地处理字符串的替换操作。
参数说明：
FROM int，表示从第一个string的第几个字符开始替换。
for int，可选参数，表示替换第一个string的字符数目。如果不指定，默认替换从from开始的所有字符。
返回值类型：text
示例：从位置3开始，用"xyz"替换原字符串中的部分，结果为"abxyzf"。
```
SELECT overlay('abcdef' placing 'xyz' FROM 3);
 overlay
---------
 abxyzf
(1 row)
```
在字符串"hello"中，从第2个字符开始，连续替换3个字符，用"world"来覆盖这些位置，结果为"hworldo"。
```
SELECT overlay('hello' placing 'world' from 2 for 3 );
 overlay 
---------
 hworldo
(1 row)
```
#### replace(string text, from text, to text)
描述：将原字符串中所有匹配from参数的部分替换为to参数指定的内容。
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
replace函数大小写敏感，需确保from text和to text的大小写与原字符串匹配。
返回值类型：text
示例：
```
SELECT replace('databasedata', 'data', 'xxx');
  replace
------------
 xxxbasexxx
(1 row)
```
#### rpad(string text, length int \[, fill text\])
描述：使用填充字符fill，把string填充到length长度。如果string已经比length长则将其从尾部截断。
参数说明：
- string，要处理的原字符串。
- length，目标字符串的长度。
- fill（可选参数）：用于填充的字符或字符串。缺省时为单个空格 ' '。
返回值类型：text
示例：
使用填充字符"xy"将长度为4的原字符串"data"填充到目标长度10。
```
SELECT rpad('data', 10, 'xy');
    rpad
------------
 dataxyxyxy
(1 row)
```
使用字符"xy"填充原字符串"database"时，因string（database）比length（4）长，则将其从尾部截断，返回字符串data。
```
SELECT rpad('database',4,'xy');
 rpad
------
 data
(1 row)
```
#### rtrim(string text \[, characters text\])
描述：去除字符串右侧（末尾）的指定字符。
参数说明：
- string，要处理的原字符串。
- characters（可选参数），指定要从字符串右侧去除的字符集。缺省时，去除所有空白字符（例如，空格等）。
返回值类型：text
示例：
未指定characters参数时默认去除字符串"Database"右侧的空白字符。
```
SELECT rtrim('Database    ');
  rtrim
----------
 Database
(1 row)
```
去除字符串中的指定字符"x"。
```
SELECT rtrim('trimxxxx', 'x');
 rtrim
-------
 trim
(1 row)
```
#### rpad(string varchar, length int \[, fill varchar\])
描述：在字符串右侧填充指定字符，使字符串达到指定长度。如果string已经比length长则将其从尾部截断。
参数说明：
- string，要处理的原字符串。
- length，目标字符串的长度。length参数在DWS中表示字符长度。一个汉字长度计算为一个字符。
- fill（可选参数）：用于填充的字符或字符串。缺省时为单个空格 ' '。
返回值类型：varchar
示例：
```
SELECT rpad('data',10,'xyz');
 rpad
------------
 dataxyzxyz
(1 row)
```
```
SELECT rpad('hi',5,'abcdefg');
 rpad  
-------
 hiabc
(1 row)
```
#### replace(string varchar, search_string varchar, replacement_string varchar)
描述：用于在字符串中查找特定子字符串（search_string）并将其替换为另一个字符串（replacement_string）。
参数说明：
- string，要处理的原字符串。
- search_string，需要被替换的子字符串。
- replacement_string：用于替换search_string的新字符串。
返回值类型：varchar
示例：
将字符串"ababab and mabab"中的所有子字符串"ab"替换为"cd"。
```
SELECT replace('ababab and mabab','ab','cd');
     replace
------------------
 cdcdcd and mcdcd
(1 row)
```
#### lpad(string varchar, length int\[, repeat_string varchar\])
描述：在字符串的左侧填充指定字符，使得字符串达到指定的长度。如果原字符串的长度已经大于目标长度（length参数），则从右侧将目标字符串截断为长度为length的字符串。
参数说明：
- string，需要填充的原字符串。
- length，目标字符串的长度。
- repeat_string，可选参数，用于指定填充的字符。缺省时使用空格填充。
返回值类型：varchar
示例：
原字符串"base"长度为4，目标长度为8，使用字符串"\*"填充4个字符，填充后为"\*\*\*\*base"。
```
SELECT lpad('base',8,'*');
   lpad
----------
 ****base
(1 row)
```
原字符串"database"长度为8，目标长度为6，不需要填充，从右侧将字符串"database"截断为长度为6的字符串，返回"databa"。
```
SELECT lpad('database',6,'data');
  lpad
--------
 databa
(1 row)
```
#### regexp_replace(string, pattern, replacement \[,flags \])
描述：替换匹配POSIX正则表达式的子字符串。 如果没有匹配pattern，那么返回不加修改的string串。 如果有匹配，则返回的string串里面的匹配子串将被replacement串替换掉。
replacement串可以包含\\n， 其中\\n是1到9， 表明string串里匹配模式里第n个圆括号子表达式的子串应该被插入， 并且它可以包含\\\&表示应该插入匹配整个模式的子串。
可选的flags参数包含零个或多个改变函数行为的单字母标记，见下表。
表1flags参数的可选项 
| 选项 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|
| g  | 表示替换每一个匹配的子字符串而不仅仅是第一个（默认仅替换第一个匹配的子字符串）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| B  | 默认情况下使用Henry Spencer正则库及其正则语法。指定B选项后，表示优先选用boost regex正则库及其正则语法。 以下两种情况在指定了B选项时，也会自动转换为选择Henry Spencer正则库及其正则语法： - flags同时指定了p、q、w、x中的任意个字符。  - string或pattern参数中含有多字节字符。   |
| b  | 表示按照BRE(POSIX Basic Regular Expression)匹配模式的规则进行匹配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| c  | 大小写敏感匹配                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| e  | 表示按照ERE(POSIX Extended Regular Expression)匹配模式的规则进行匹配。当b和e都未指定时，如果选用的是Henry Spencer正则库，则按照ARE(Advanced Regular Expression，类似于Perl Regular Expression)匹配模式的规则进行匹配；如果选用的是boost regex正则库，则按照Perl Regular Expression匹配模式的规则进行匹配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| i  | 大小写不敏感匹配                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| m  | 换行敏感匹配，与选项n同义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| n  | 换行敏感匹配。此选项生效时，换行符影响元字符(.、\^、$和\[\^)的匹配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| p  | 部分换行敏感匹配，此选项生效时，换行符影响元字符(.和\[\^)的匹配。部分是相对选项n而言。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| q  | 重置正则表达式为加双引号的文本字符串，所有都是普通字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| s  | 非换行敏感匹配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| t  | 紧凑语法（缺省）。该选项生效时，所有字符都很重要。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| w  | 反部分换行敏感匹配，此选项生效时，换行符影响元字符(\^和$)的匹配。部分是相对选项n而言。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| x  | 扩展语法。与紧凑语法相对，在扩展的语法中，正则表达式中的空白字符被忽略。空白字符包括空格、水平制表符、新行和任何属于space字符表的字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
返回值类型：varchar
示例：
```
SELECT regexp_replace('Thomas', '.[mN]a.', 'M');
 regexp_replace
----------------
 ThM
(1 row)
SELECT regexp_replace('foobarbaz','b(..)', E'X\\1Y', 'g') AS RESULT;                                                    
   result    
-------------
 fooXarYXazY
(1 row)
```
#### SPACE(n int)
描述：返回由n个空格组成的字符串。若参数含有NULL值，返回NULL。
返回值类型：text
示例：
```
SELECT SPACE(2) as result;
 result
--------
   
(1 row)
```
