GBase 8a
运维管理
文章

GBase8a_字符串函数_03

发表于2026-05-31 19:56:1127次浏览23个评论

LOCATE()

语法格式

LOCATE(substr,str)
LOCATE(substr,str,pos)

函数说明

  • 第一种语法返回子串 substr 在字符串 str 中第一次出现的位置,LOCATE(substr,str)与 INSTR(str,substr)相似,只是参数的位置被颠倒;
  •  第二种语法返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。

说明

 如果 substr 不在 str 中,则返回 0;

 substr 在 str 中的位置,以 1 开始计数;

 如果 pos 值大于 str 的长度,则返回为 0;

 如果 pos 为 NULL,则返回 NULL。

示例

示例 1:返回“bar”在“foobarbar”中第一次出现的位置。

gbase> SELECT LOCATE('bar','foobarbar') FROM dual;
+----------------------------+
| LOCATE('bar','foobarbar') |
+----------------------------+
| 4 |
+----------------------------+
1 row in set

示例 2:“xbar”不在“foobar”中,返回值为 0。

gbase> SELECT LOCATE('xbar','foobar') FROM dual;
+--------------------------+
| LOCATE('xbar','foobar') |
+--------------------------+
| 0 |
+--------------------------+
1 row in set

示例 3:返回“bar”在“foobarbar”中的第 5 位后,第一次出现的位置。

gbase> SELECT LOCATE('bar','foobarbar',5) FROM dual;
+------------------------------+
| LOCATE('bar','foobarbar',5) |
+------------------------------+
| 7 |
+------------------------------+
1 row in set

示例 4:如有任一参数是一个二进制字符串,它是字母大小写敏感的。

gbase> SELECT LOCATE(BINARY'bAr','foobarbar',5) FROM dual;
+------------------------------------+
| LOCATE(BINARY'bAr','foobarbar',5) |
+------------------------------------+
| 0 |
+------------------------------------+
1 row in set

LOWER(str)

函数说明

将字符串 str 中的所有字符改变为小写形式。

示例

示例 1:LOWER(str)等价于 LCASE()。

gbase> SELECT LOWER('QUADRATICALLY'),LCASE('QUADRATICALLY') FROM dual;
+------------------------+------------------------+
| LOWER('QUADRATICALLY') | LCASE('QUADRATICALLY') |
+------------------------+------------------------+
| quadratically | quadratically |
+------------------------+------------------------+
1 row in set

LPAD(str,len,padstr)

函数说明

用字符串 padstr 在 str 的左边填补, 直至它的长度达到 len 个字符长度, 然后返回补齐后的 str;如果 str 的长度长于 len,那么它将被截取到 len 个字符。

示例

示例 1:将“??”补到“hi”左侧,总长度为 4 位。

gbase> SELECT LPAD ('hi',4,'??') FROM dual;
+-------------------+
| LPAD('hi',4,'??') |
+-------------------+
| ??hi |
+-------------------+
1 row in set

示例 2:“hi”的长度大于 1,则“hi”将被截取到 1 个字符。

gbase> SELECT LPAD('hi',1,'??') FROM dual;
+-------------------+
| LPAD('hi',1,'??') |
+-------------------+
| h |
+-------------------+
1 row in set

LTRIM(str)

函数说明

移除 str 最左边的连续多个空格。

示例

示例 1:移除“ barbar”左边两个空格。

gbase> SELECT LTRIM(' barbar') FROM dual;
+-------------------+
| LTRIM(' barbar') |
+-------------------+
| barbar |
+-------------------+
1 row in set

MAKE_SET(bits,str1,str2,...)

函数说明

返回一个设定值(是由“,”分开的 str 组成的字符串),由相应位在 bits 集合中为 1 的字符串组成, bits 中的比特值按照从右到左的顺序接受检验(由低比特位到高比特位)。如果 str1 对应第一位比特值为 1,str2 对应第二位比特值为 1,就返回 str1,str2。以此类推,str1,str2,...中的 NULL 值不会被添加到结果中。

示例

示例 1:将 1 的比特值按从右到左进行校验,

gbase> SELECT MAKE_SET(1,'a','b','c') FROM dual;
+-------------------------+
| MAKE_SET(1,'a','b','c') |
+-------------------------+
| a |
+-------------------------+
1 row in set

“a”对应第一位比特值为 1。

示例 2:将 1 和 4 进行或运算,获得 0101 的比特值,按从右到左进行校验,即第一位和第三位的比特值为 1,返回 str1 和 str3 字符串。

gbase> SELECT MAKE_SET(1 | 4,'hello','nice','world') FROM dual;
+----------------------------------------+
| MAKE_SET(1 | 4,'hello','nice','world') |
+----------------------------------------+
| hello,world |
+----------------------------------------+
1 row in set

示例 3:字符串列中的 NULL 不被添加到结果中。

gbase> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world') FROM dual;
+---------------------------------------------+
| MAKE_SET(1 | 4,'hello','nice',NULL,'world') |
+---------------------------------------------+
| hello |
+---------------------------------------------+
1 row in set

示例 4:0 没有对应的 str。

gbase> SELECT MAKE_SET(0,'a','b','c') FROM dual;
+-------------------------+
| MAKE_SET(0,'a','b','c') |
+-------------------------+
| |
+-------------------------+
1 row in set

MID(str,pos,len)

函数说明

返回字符串 str 中,从 pos 位置开始,长度为 len 的子串。MID(str,pos,len)等价于SUBSTRING(str,pos,len)。

MID 包含 MID(str,pos)、 MID(str,pos,len)、 MID(str from pos)、 MID(str from pos for len)四种语法格式。

示例

示例 1:MID()的 4 种语法格式示例。

gbase> SELECT MID('Quadratically',5,6);
+--------------------------+
| MID('Quadratically',5,6) |
+--------------------------+
| ratica |
+--------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> SELECT MID('Quadratically',5);
+------------------------+
| MID('Quadratically',5) |
+------------------------+
| ratically |
+------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> SELECT MID('Quadratically' from 5);
+-----------------------------+
| MID('Quadratically' from 5) |
+-----------------------------+
| ratically |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> SELECT MID('Quadratically' from 5 for 6);
+-----------------------------------+
| MID('Quadratically' from 5 for 6) |
+-----------------------------------+
| ratica |
+-----------------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> SELECT SUBSTRING('Quadratically',5,6),MID('Quadratically',5,6) FROM dual;
+--------------------------------+--------------------------+
| SUBSTRING('Quadratically',5,6) | MID('Quadratically',5,6) |
+--------------------------------+--------------------------+
| ratica | ratica |
+--------------------------------+--------------------------+
1 row in set

NVL(string1,replace_with)

函数说明

如果 string1 为 NULL,则 NVL()函数返回 replace_with 的值,否则返回 string1 的值。

示例

示例 1:address 列的值为 NULL,返回“UNKNOWN”,否则返回 address 的值。

gbase> DROP TABLE IF EXISTS t_user;
Query OK, 0 rows affected

gbase> CREATE TABLE t_user (id int ,name varchar(10),address varchar(200));
Query OK, 0 rows affected

gbase> INSERT INTO t_user VALUES (1,'Tom','East Street'),(2,'Mike',NULL),(3,'Rose','TANGREN ROAD'),(4,'White',NULL);
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0

gbase> SELECT id,name,NVL(address,'UNKOWN') FROM t_user;
+------+-------+-----------------------+
| id | name | NVL(address,'UNKOWN') |
+------+-------+-----------------------+
| 1 | Tom | East Street |
| 2 | Mike | UNKOWN |
| 3 | Rose | TANGREN ROAD |
| 4 | White | UNKOWN |
+------+-------+-----------------------+
4 rows in set

OCT(N)

函数说明

返回一个 N 的八进制值的字符串。此处,N 是一个 BIGINT 类型的数字。如果 N 是一个 NULL,返回值也是 NULL。OCT(N)等价于 CONV(N,10,8)。

示例

示例 1:返回 12 的八进制值。

gbase> SELECT OCT(12) FROM dual;
+---------+
| OCT(12) |
+---------+
| 14 |
+---------+
1 row in set

示例 2:N 是 NULL,返回值为 NULL。

gbase> SELECT OCT(NULL) FROM dual;
+-----------+
| OCT(NULL) |
+-----------+
| NULL |
+-----------+
1 row in set

ORD(str)

函数说明

如果字符串 str 的最左边的字符是一个多字节的字符,返回该字符的代码,代码的计算通过使用公式 ((1st byte code)+ (2nd byte code × 256)+ (3rd byte code

2562)…)计算其组成字节的数值而得出。如果最左边的字符不是一个多字节字符,返回值与 ASCII()函数的返回值相同。

示例

示例 1:str 为“2”,返回 2 对应的 ASCII 码值。

gbase> SELECT ORD('2') FROM dual;
+----------+
| ORD('2') |
+----------+
| 50 |
+----------+
1 row in set

示例 2:str 为“南大通用”,返回“南”对应的代码。

gbase> SELECT ORD('南大通用') FROM dual;
+---------------------+
| ORD('南大通用') |
+---------------------+
| 15043991 |
+---------------------+
1 row in set

 

评论

登录后才可以发表评论
GBase用户51829发表于 2个月前
LOCATE 用于查找子串首次出现位置,和 INSTR 功能相近仅参数顺序不同,支持指定起始查找位置;匹配不到、起始位置超出字符串长度均返回 0,起始位置为 NULL 时结果也为 NULL,计数从 1 开始。
GBase用户51829发表于 2个月前
OCATE 分两种用法,可指定查找起始位置,位序从 1 算起;无匹配、pos 超限返回 0,pos 为 NULL 则返回 NULL,注意它与 INSTR 的参数顺序区别。
GBase用户51966发表于 2个月前
非常实用的内容,收藏了。
GBase用户50900发表于 2个月前
感谢分享,非常有帮助。
一个老汉发表于 2个月前
总结得很到位,学习。
佛洛伊得发表于 2个月前
内容详实,值得收藏。
GBase用户51511发表于 2个月前
非常实用的内容,收藏了。
GBase用户51510发表于 2个月前
干货满满,感谢楼主分享。
塔山发表于 2个月前
非常实用的内容,收藏了。
GBase用户21143发表于 2个月前
不错
GBase用户21143发表于 2个月前
感谢分享
用户头像
GBase用户28017发表于 2个月前
优秀
GBase用户51966发表于 2个月前
干货满满,感谢楼主分享。
GBase用户50900发表于 2个月前
总结得很到位,学习。
GBase用户51510发表于 2个月前
写得很好,学习了!
一个老汉发表于 2个月前
非常实用的内容,收藏了。
塔山发表于 2个月前
写得很好,学习了!
GBase用户51511发表于 2个月前
内容详实,值得收藏。
佛洛伊得发表于 2个月前
不错的文章,受益匪浅。
GBase用户21143发表于 2个月前
还是保存下来
曙光照亮黑夜发表于 2个月前
不错的文章,受益匪浅。
GBase用户21143发表于 1个月前
整理的 LOCATE、LPAD 等字符串函数案例实用,日常数据清洗刚好能用
GBase用户21143发表于 1个月前
NVL、MID 用法讲解清晰,解决了我开发时字段空值、字符截取的不少疑惑