§ Oracle兼容-函数-TRIM()/LTRIM()/RTRIM()函数


§ 1. 语法

TRIM(str)
TRIM(LEADING [remchr] FROM str)
TRIM(TRAILING [remchr] FROM str)
TRIM(BOTH [remchr] FROM str)
TRIM(remchr FROM str)

LTRIM(str[, remstr])
RTRIM(str[, remstr])
1
2
3
4
5
6
7
8

§ 2. 定义和用法

因为GreatSQL已原生支持 TRIM()/LTRIM()/RTRIM() 函数,因此想要在GreatSQL中使用扩展后的函数时,需要先执行 SET sql_mode = ORACLE; 激活Oracle兼容模式。

在Oracle兼容模式下,各个函数的作用分别如下:

  • TRIM() 函数的作用是从字符串 str 中删除指定的字符 remchr,未声明 remchr 时则默认删除空格。
  • LTRIM() 函数的作用是从字符串 str 的最左侧起,删除指定的字符串 remstr,未声明 remstr 时则默认删除空格。
  • RTRIM() 函数的作用是从字符串 str 的最右侧起,删除指定的字符串 remstr,未声明 remstr 时则默认删除空格。

各参数说明如下:

  • remchr:要删除的字符,在Oracle兼容模式下,TRIM()函数只能指定删除一个字符(不是一串字符串),默认为空格(注意:空格不是空值)。当参数 remchr 为空值('')时,结果总是返回NULL。特别说明:是中文、emoji等虽然是多字节字符,但在 TRIM() 函数中,仍被视为一个字符。
  • remstr:要删除的字符串,用于 LTRIM()/RTRIM() 函数。
  • LEADING:从头部开始,删除到第一个不是 remchr 的位置。
  • TRAILING:从尾部开始,删除到第一个不是 remchr 的位置。
  • BOTH:开头和结尾都算,都不指定时默认启用。

§ 3. 示例

greatsql> SET sql_mode = ORACLE;
-- "  GreatSQL  " 字符串首尾各有两个空格
greatsql> SELECT TRIM(LEADING '' FROM '  GreatSQL  ');
+--------------------------------------+
| TRIM(LEADING '' FROM '  GreatSQL  ') |
+--------------------------------------+
| NULL                                 |
+--------------------------------------+

greatsql> SELECT TRIM(LEADING ' ' FROM '  GreatSQL  '), LENGTH(TRIM(LEADING ' ' FROM '  GreatSQL  ')) AS LEN;
+---------------------------------------+------+
| TRIM(LEADING ' ' FROM '  GreatSQL  ') | LEN  |
+---------------------------------------+------+
| GreatSQL                              |   10 |
+---------------------------------------+------+

-- 不指定默认就是BOTH
greatsql> SELECT TRIM(' ' FROM '  GreatSQL  '), LENGTH(TRIM(' ' FROM '  GreatSQL  ')) AS LEN;
+-------------------------------+------+
| TRIM(' ' FROM '  GreatSQL  ') | LEN  |
+-------------------------------+------+
| GreatSQL                      |    8 |
+-------------------------------+------+

-- 指定多余一个字符,报错
greatsql> SELECT TRIM('ea' FROM '  GreatSQL  ');
ERROR 7564 (HY000): trim set should have only one character

-- 一个中文视为一个字符
greatsql> SELECT TRIM('库' FROM 'GreatSQL数据库');
+--------------------------------------+
| TRIM('库' FROM 'GreatSQL数据库')     |
+--------------------------------------+
| GreatSQL数据                         |
+--------------------------------------+

-- 一个emoji字符视为一个字符
greatsql> SELECT TRIM('😀' FROM 'GreatSQL数据库😀');
+-------------------------------------+
| TRIM('?' FROM 'GreatSQL数据库?')    |
+-------------------------------------+
| GreatSQL数据库                      |
+-------------------------------------+

-- LTRIM()/RTRIM()支持多个字符
greatsql> SELECT LTRIM('GreatSQL', 'Great');
+----------------------------+
| LTRIM('GreatSQL', 'Great') |
+----------------------------+
| SQL                        |
+----------------------------+

greatsql> SELECT RTRIM('GreatSQL', 'SQL');
+--------------------------+
| RTRIM('GreatSQL', 'SQL') |
+--------------------------+
| Great                    |
+--------------------------+

greatsql> SELECT RTRIM('  GreatSQL  '), LENGTH(RTRIM('  GreatSQL  '));
+-----------------------+-------------------------------+
| RTRIM('  GreatSQL  ') | LENGTH(RTRIM('  GreatSQL  ')) |
+-----------------------+-------------------------------+
|   GreatSQL            |                            10 |
+-----------------------+-------------------------------+

greatsql> SELECT LTRIM('  GreatSQL  '), LENGTH(LTRIM('  GreatSQL  '));
+-----------------------+-------------------------------+
| LTRIM('  GreatSQL  ') | LENGTH(LTRIM('  GreatSQL  ')) |
+-----------------------+-------------------------------+
| GreatSQL              |                            10 |
+-----------------------+-------------------------------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

扫码关注微信公众号

greatsql-wx