
# SQL字符串函数
#### 功能描述
SQL提供字符串函数，用于对字符类型的数据执行拼接、大小写转换等操作，具体请参见[表1]。
SQL语法中，字符必须被单引号（''）包裹，无符号或双引号（""）包裹的为字段或表名称，如：'msg'表示字符串msg，msg或"msg"表示日志结构化msg字段。
#### 语法格式
```
SELECT (fieldname1 || fieldname2) AS fieldname1_fieldname2
```
#### 字符串函数语句
 表1字符串函数语句 
| 语句                                              | 说明                                                                                                               | 示例                                                                                                                                                                              |
|:---|:---|:---|
| CONCAT(expr1, expr2...)                         | 拼接列举的所有字符串。                                                                                                      | SELECT str1, str2, str3, CONCAT(str1, str2, str3) WHERE str1 IS NOT NUll                                                 |
| TEXTCAT(expr, expr)                             | 拼接两个字符串。                                                                                                         | SELECT str1, str2, TEXTCAT(str1, str2) WHERE str1 IS NOT NUll                                                             |
| STRING_FORMAT(pattern\[, args...\])             | 根据JAVA的String格式对字符串进行格式化。                                                                                        | SELECT str1, STRING_FORMAT(str1, '%s') WHERE str1 IS NOT NUll                                                             |
| LENGTH(expr)                                    | 返回字符串的长度，即字符串中UTF-16字符个数。                                                                                        | SELECT LENGTH(str1) WHERE str1 IS NOT NUll                                                                                 |
| LOWER(expr)                                     | 将字符串转换为小写形式。                                                                                                     | SELECT LOWER(str1) WHERE str1 IS NOT NUll                                                                                 |
| POSITION(string1 IN string2 \[FROM fromIndex\]) | 返回string1在string2中首次出现位置的索引。搜索从指定索引开始，如果没有指定索引，则从索引1开始。如果string1不存在于string2中，则返回0。                               | SELECT POSITION(str1 IN str2 FROM 5)                                                                                                                                            |
| REGEXP_EXTRACT(expr, pattern, \[index\])        | 返回字符串中匹配指定正则表达式的子字符串。索引从1开始。如果没匹配，则返回空值。如果没有指定索引，或者索引为0，则返回第一个匹配的子字符串。如想精确匹配，请在正则表达式前后分别加上符号\^和$。                | SELECT REGEXP_EXTRACT(str1, '\[A-Za-z\]+://\[A-Za-z0-9.-\]+(/\[\^ \]\*)', 5)                                                                                                    |
| REGEXP_LIKE(expr, pattern)                      | 判断字符串是否匹配指定的正则表达式。如想精确匹配，请在正则表达式前后分别加上符号\^和$。该函数与LIKE语句用法类似，区别在于LIKE语句搜索的是匹配指定模式的内容。                             | SELECT REGEXP_LIKE(str1, '\\.(jpg\|jpeg\|png\|gif)$')                                                                                                                           |
| REPLACE(expr, pattern, replacement)             | 使用replacement替换expr中与pattern相同的子字符串。                                                                             | SELECT REPLACE(expr,pattern, replacement)                                                                                                                                       |
| STRPOS(string1, string2)                        | 返回string2在string1中首次出现位置的索引。查找从索引1开始。如果查找没有结果，则返回0。                                                              | SELECT STRPOS(str1, str2) WHERE str1 IS NOT NUll AND str2 IS NOT NUll |
| SUBSTRING(expr, index, \[length\])              | 截取字符串。从指定索引处开始截取，结束位置由指定长度决定。长度按照UTF-16字符个数计算。                                                                   | SELECT SUBSTRING(str1, 3, 10) WHERE str1 IS NOT NUll                                                                    |
| RIGHT(expr, \[length\])                         | 从字符串最右处开始往左截取指定长度。                                                                                               | SELECT RIGHT(str1, 5) WHERE str1 IS NOT NUll                                                                               |
| LEFT(expr, \[length\])                          | 从字符串最左处开始往右截取指定长度。                                                                                               | SELECT LEFT(str1, 5) WHERE str1 IS NOT NUll                                                                               |
| SUBSTR(expr, index, \[length\])                 | 与SUBSTRING相同。                                                                                                    | SELECT SUBSTR(str1, 3, 10) WHERE str1 IS NOT NUll                                                                         |
| UPPER(expr)                                     | 将字符串转换为大写形式。                                                                                                     | SELECT UPPER(str1) WHERE str1 IS NOT NUll                                                                                |
| REVERSE(expr)                                   | 反转字符串。                                                                                                           | SELECT REVERSE(str1) WHERE str1 IS NOT NUll                                                                              |
| LPAD(expr, length, chars)                       | 在字符串左侧填充指定字符，直至字符串达到指定长度。如果指定长度小于字符串本身的长度，则按照指定长度对字符串执行截断操作。如果字符串或指定字符为空值，则返回空值。如果指定字符为空白，不会执行填充操作，但如有必要可能会删减字符。 | SELECT LPAD(str1, 50, 'testStr') WHERE str1 IS NOT NUll                                                                    |
| RPAD(expr, length, chars)                       | 在字符串右侧填充指定字符，直至字符串达到指定长度。如果指定长度小于字符串本身的长度，则按照指定长度对字符串执行截断操作。如果字符串或指定字符为空值，则返回空值。如果指定字符为空白，不会执行填充操作，但如有必要可能会删减字符。 | SELECT RPAD(str1, 50, 'testStr') WHERE str1 IS NOT NUll         |
| CONTAINS_STRING(\<expr\>, str)                  | 判断expr是否包含str字符串                                                                                                 | SELECT CONTAINS_STRING(log_level,'warn')                                                                                                                                        |
| ICONTAINS_STRING(\<expr\>, str)                 | 判断expr是否包含str字符串，不区分字符串大小写                                                                                       | SELECT ICONTAINS_STRING(log_level,'WARN')                                                                                                                                       |
   
#### 示例及说明
**REPEAT函数**
REPEAT(expr, \[N\])函数将expr重复N次。
1. 字段样例 field4:is
   
2. 查询和分析语句
   ```
   select field4,REPEAT(field4,3)
   ```
   
3. 查询和分析结果
   表2查询和分析结果 
   | **field4** | **EXPR$1** |
   |:---|:---|
   | Is         | isisis     |
      
   
 
