云数据库OceanBase入门教程 OceanBase 字符串函数

2024-02-26 开发教程 云数据库OceanBase入门教程 匿名 3

CONCAT

声明

CONCAT(str1, .., strN)

说明

把多个字符串连接成一个字符串。参数中包含 NULL时,返回 NULL

例子

obclient> SELECT
CONCAT('test','obclient', '1.0'),
CONCAT('test','obclient', NULL)
\G
*************************** 1. row ***************************
CONCAT('test','obclient', '1.0'): testobclient1.0
CONCAT('test','obclient', NULL): NULL
1 row in set (0.01 sec)

CONCAT_WS

声明

CONCAT_WS(separator, str1, .., strN)

说明

把多个字符串连接成一个字符串,相邻字符串间使用 separator分隔。参数中包含 NULL时,将忽略 NULL

例子

obclient> SELECT
CONCAT_WS('_', 'First', 'Second'),
CONCAT_WS('_', 'First', NULL, 'Second')
\G
*************************** 1. row ***************************
CONCAT_WS('_', 'First', 'Second'): First_Second
CONCAT_WS('_', 'First', NULL, 'Second'): First_Second
1 row in set (0.00 sec)

FORMAT

声明

FORMAT(X,D)

说明

把数字 X 格式化为“#,###,###.##”格式,四舍五入到 D 位小数,并以字符串形式返回结果(如果整数部分超过三位,会用“,”作为千分位分隔符)。如果 D 为 0,则结果没有小数点或小数部分。

例子

obclient> SELECT FORMAT(12332.123456, 4) from DUAL;
+-------------------------+
| format(12332.123456, 4) |
+-------------------------+
| 12,332.1235 |
+-------------------------+
1 row in set (0.00 sec)
obclient> SELECT FORMAT(12332.1, 4) from DUAL;
+--------------------+
| format(12332.1, 4) |
+--------------------+
| 12,332.1000 |
+--------------------+
1 row in set (0.01 sec)
obclient> SELECT FORMAT(12332.2, 0) from DUAL;
+--------------------+
| format(12332.2, 0) |
+--------------------+
| 12,332 |
+--------------------+
1 row in set (0.00 sec)

SUBSTR

声明

SUBSTR(str, pos)
SUBSTR(str, pos, len)
SUBSTR(str FROM pos)
SUBSTR(str FROM pos FOR len)

说明

返回 str的子字符串,起始位置为 pos,长度为 len。参数中包含 NULL时,返回 NULL

  • 不指定 len时,返回的子字符串从 pos位置开始到 str结尾。

  • pos值为负数时,从 str尾部向头部倒序确定起始位置。

  • len小于等于 0,或 pos指定的起始位置非法时,返回空字符串。

例子

obclient> SELECT
SUBSTR('abcdefg', 3),
SUBSTR('abcdefg', 3, 2),
SUBSTR('abcdefg', -3),
SUBSTR('abcdefg', 3, -2),
SUBSTR('abcdefg' from -4 for 2)
\G
*************************** 1. row ***************************
SUBSTR('abcdefg', 3): cdefg
SUBSTR('abcdefg', 3, 2): cd
SUBSTR('abcdefg', -3): efg
SUBSTR('abcdefg', 3, -2):
SUBSTR('abcdefg' from -4 for 2): de
1 row in set (0.01 sec)

SUBSTRING

声明

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
SUBSTRING(str FROM pos)
SUBSTRING(str FROM pos FOR len)

说明

SUBSTR

TRIM

声明

TRIM([[{BOTH | LEADING | TRAILING}] [remstr] FROM] str)

说明

删除字符串所有前缀和/或后缀,默认为 BOTH。参数中包含 NULL时,返回 NULL

例子

obclient> SELECT
TRIM(' bar '),
TRIM(LEADING 'x' FROM 'xxxbarxxx'),
TRIM(BOTH 'x' FROM 'xxxbarxxx'),
TRIM(TRAILING 'x' FROM 'xxxbarxxx')
\G
*************************** 1. row ***************************
TRIM(' bar '): bar
TRIM(LEADING 'x' FROM 'xxxbarxxx'): barxxx
TRIM(BOTH 'x' FROM 'xxxbarxxx'): bar
TRIM(TRAILING 'x' FROM 'xxxbarxxx'): xxxbar
1 row in set (0.01 sec)

LTRIM

声明

LTRIM(str)

说明

删除字符串左侧的空格。

RTRIM

声明

RTRIM(str)

说明

删除字符串右侧的空格。

ASCII

声明

ASCII(str)

说明

返回字符串最左侧字符的 ASCII 码。

ORD

声明

ORD(str)

说明

返回字符串最左侧字符的字符码。单字节编码如果最左侧字符是多字节编码字符,返回值计算规则如下:

(1st byte code)
+ (2nd byte code * 256)
+ (3rd byte code * 256^2) ...

例子

obclient> SELECT ORD('中国');
+---------------+
| ORD('中国') |
+---------------+
| 14989485 |
+---------------+
1 row in set (0.01 sec)

LENGTH

声明

LENGTH(str)

说明

返回 str的字节长度。

例子

obclient> SELECT LENGTH('中国'), LENGTH('hello');
+------------------+-----------------+
| LENGTH('中国') | LENGTH('hello') |
+------------------+-----------------+
| 6 | 5 |
+------------------+-----------------+
1 row in set (0.01 sec)

CHAR_LENGTH

声明

CHAR_LENGTH(str)

说明

返回字符串包含的字符数。

例子

obclient> SELECT CHAR_LENGTH('中国'), CHAR_LENGTH('hello');
+-----------------------+----------------------+
| CHAR_LENGTH('中国') | CHAR_LENGTH('hello') |
+-----------------------+----------------------+
| 2 | 5 |
+-----------------------+----------------------+
1 row in set (0.00 sec)

UPPER

声明

UPPER(str)

说明

将字符串中的小写字母转化为大写字母。

例子

obclient> obclient> SELECT UPPER('obclient您好!');
+----------------------------+
| UPPER('obclient您好!') |
+----------------------------+
| OBCLIENT您好! |
+----------------------------+
1 row in set (0.00 sec)

LOWER

声明

LOWER(str)

说明

将字符串中的大写字母转化为小写字母。

例子

obclient> SELECT LOWER('obclient您好!');
+-----------------------------+
| LOWER('obclient您好!') |
+-----------------------------+
| obclient您好! |
+-----------------------------+
1 row in set (0.01 sec)

HEX

声明

HEX(str)

说明

将数字或字符串转化为十六进制字符串。

例子

obclient> SELECT HEX(255), HEX('abc');
+----------+------------+
| HEX(255) | HEX('abc') |
+----------+------------+
| FF | 616263 |
+----------+------------+
1 row in set (0.00 sec)

UNHEX

声明

UNHEX(str)

说明

将十六进制字符串转化为正常字符串。

例子

obclient> SELECT UNHEX('4f6365616e42617365');
+-----------------------------+
| UNHEX('4f6365616e42617365') |
+-----------------------------+
| OceanBase |
+-----------------------------+
1 row in set (0.01 sec)

MD5

声明

MD5(str)

说明

返回字符串的 MD5 值。

例子

obclient> SELECT MD5(1);
+----------------------------------+
| MD5(1) |
+----------------------------------+
| c4ca4238a0b923820dcc509a6f75849b |
+----------------------------------+
1 row in set (0.00 sec)

INT2IP

声明

INT2IP(int_value)

说明

将整数内码转换成 IP 地址。

例子

obclient> SELECT
INT2IP(16777216),
HEX(16777216),
INT2IP(1)
\G
*************************** 1. row ***************************
INT2IP(16777216): 1.0.0.0
HEX(16777216): 1000000
INT2IP(1): 0.0.0.1
1 row in set (0.01 sec)

IP2INT

声明

IP2INT('ip_addr')

说明

将 IP 地址转换成整数内码。

例子

obclient> SELECT
IP2INT('0.0.0.1'),
HEX(IP2INT('0.0.0.1')),
HEX(IP2INT('1.0.0.0'))
\G
*************************** 1. row ***************************
IP2INT('0.0.0.1'): 1
HEX(IP2INT('0.0.0.1')): 1
HEX(IP2INT('1.0.0.0')): 1000000
1 row in set (0.01 sec)

LIKE

声明

str1 [NOT] LIKE str2 [ESCAPE str3]

说明

字符串通配符匹配。参数中包含 NULL时,返回 NULL

通配符包括:

  • %:匹配任意长度字符串。

  • _:匹配单个字符。

ESCAPE 用于定义转义符,如果 str2 中包含 str3,在匹配时 str3 后的字符将做为普通字符处理。

例子

obclient> SELECT 'ab%' LIKE 'abc%' ESCAPE 'c';
+------------------------------+
| 'ab%' LIKE 'abc%' ESCAPE 'c' |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.01 sec)

REGEXP

声明

str [NOT] REGEXP | RLIKE pat

说明

正则匹配。参数中包含 NULL时,返回 NULL

例子

obclient> SELECT
1234 REGEXP 1,
'hello' RLIKE 'h%'
\G
*************************** 1. row ***************************
1234 REGEXP 1: 1
'hello' RLIKE 'h%': 0
1 row in set (0.01 sec)

REPEAT

声明

REPEAT(str, count)

说明

返回 str重复 count次组成的字符串。count小于等于 0 时,返回空字符串。参数中包含 NULL时,返回 NULL

例子

obclient> SELECT
REPEAT('1', -1),
REPEAT(null, null),
REPEAT('Abc', 4)
\G
*************************** 1. row ***************************
REPEAT('1', -1):
REPEAT(null, null): NULL
REPEAT('Abc', 4): AbcAbcAbcAbc
1 row in set (0.01 sec)

SPACE

声明

SPACE(N)

说明

返回包含 N个空格的字符串。

SUBSTRING_INDEX

声明

SUBSTRING_INDEX(str, delim, count)

说明

在定界符 delim以及 count出现前,从字符串 str返回字符串。若 count为正值,则返回最终定界符(从左边开始)左边的一切内容。若 count为负值,则返回定界符(从右边开始)右边的一切内容。任意一个参数为 NULL,返回 NULL;若 strdelim为空字符串,则返回空串;若 count= 0, 返回空串。

str, delim, count参数支持数值与字符串的隐式转换。

例子

obclient>select substring_index('abcdabc', 'abc', 0), substring_index('abcdabc', 'abc', 1), substring_index('abcdabc', 'abc', 2), substring_index('abcdabc', 'abc', 3), substring_index('abcdabc', 'abc', -1), substring_index('abcdabc', 'abc', -2), substring_index('abcdabc', 'abc', -3)\G;
*************************** 1. row ***************************
substring_index('abcdabc', 'abc', 0):
substring_index('abcdabc', 'abc', 1):
substring_index('abcdabc', 'abc', 2): abcd
substring_index('abcdabc', 'abc', 3): abcdabc
substring_index('abcdabc', 'abc', -1):
substring_index('abcdabc', 'abc', -2): dabc
substring_index('abcdabc', 'abc', -3): abcdabc
1 row in set (0.00 sec)

LOCATE

声明

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

说明

第一个语法返回字符串 str中子字符串 substr的第一个出现位置。第二个语法返回字符串 str中子字符串 substr的第一个出现位置, 起始位置在 pos。如若 substr不在 str中,则返回值为 0。

例子

obclient> SELECT LOCATE('bar', 'foobarbar'), LOCATE('xbar', 'foobar'), LOCATE('bar', 'foobarbar',5);
+----------------------------+--------------------------+------------------------------+
| LOCATE('bar', 'foobarbar') | LOCATE('xbar', 'foobar') | LOCATE('bar', 'foobarbar',5) |
+----------------------------+--------------------------+------------------------------+
| 4 | 0 | 7 |
+----------------------------+--------------------------+------------------------------+
1 row in set (0.00 sec)

POSITION

声明

POSITION(substr IN str)

说明

LOCATE同义。

INSTR

声明

INSTR(str,substr)

说明

返回字符串 str中子字符串的第一个出现位置。这和 LOCATE()的双参数形式相同,除非参数的顺序被颠倒。

例子

obclient> SELECT INSTR('foobarbar', 'bar'), INSTR('xbar', 'foobar');
+---------------------------+-------------------------+
| INSTR('foobarbar', 'bar') | INSTR('xbar', 'foobar') |
+---------------------------+-------------------------+
| 4 | 0 |
+---------------------------+-------------------------+
1 row in set (0.00 sec)

REPLACE

声明

REPLACE(str, from_str, to_str)

说明

返回字符串 str以及所有被字符 to_str替代的字符串 from_str

例子

obclient> SELECT REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www');
+---------------------------------------------------------+
| REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www') |
+---------------------------------------------------------+
| wwwefg.gpg.nowdew.wwwdwwwe |
+---------------------------------------------------------+
1 row in set (0.00 sec)

FIELD

声明

FIELD(str,str1,str2,str3,…)

说明

返回参数 strstr1, str2, str3,… 列表中的索引位置(从 1 开始的位置)。在找不到 str的情况下,返回值为 0。

如果所有的对于 FIELD()的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数均按照 double 类型进行比较。

如果 str为 NULL,则返回值为 0,原因是 NULL 不能同任何值进行同等比较。FILED()ELT()的补数。

例子

obclient> select field('abc','abc1','abc2','abc','abc4','abc'), field(NULL, 'null1', NULL);
+-----------------------------------------------+----------------------------+
| field('abc','abc1','abc2','abc','abc4','abc') | field(NULL, 'null1', NULL) |
+-----------------------------------------------+----------------------------+
| 3 | 0 |
+-----------------------------------------------+----------------------------+
1 row in set (0.00 sec)

ELT

声明

ELT(N, str1, str2, str3,…)

说明

若 N=1,则返回值为 str1;若 N=2,则返回值为 str2;以此类推。若 N 小于 1 或大于参数的数目,则返回值为 NULL。ELT()FIELD()的补数。

例子

obclient> select elt(3, 'abc1', 'abc2', 'abc', 'abc4', 'abc'), elt(0, 'null1', NULL);
+----------------------------------------------+-----------------------+
| elt(3, 'abc1', 'abc2', 'abc', 'abc4', 'abc') | elt(0, 'null1', NULL) |
+----------------------------------------------+-----------------------+
| abc | NULL |
+----------------------------------------------+-----------------------+
1 row in set (0.00 sec)

INSERT

声明

INSERT (str1,pos,len,str2)

说明

返回字符串 str1,字符串中起始于 pos位置,长度为 len的子字符串将被 str2取代。如果 pos超过字符串长度,则返回值为原始字符串。 假如 len的长度大于其它字符串的长度,则从位置 pos开始替换。若任何一个参数为 null,则返回值为 NULL。这个函数支持多字节字元。

  • str1str2必须是字符串,poslen必须是整数。任意参数为 NULL,结果总为 NULL。
  • str1str2中的文字符被当做字节流看待。
  • pos值为负数或者大于 str1长度时,返回 str1
  • len小于 0,或大于 str1的长度时,返回结果为 str1从开头到 pos位置的串,和 str2的组合串。

例子

obclient> select insert('Quadratic',-2,100,'What'), insert('Quadratic',7,3,'What'),
insert('Quadratic',-1,3,'What'), insert('Quadratic',10,3,'What'), insert('Quadratic',5,-1,''),
insert('Quadratic',7,-1,'What')\G;
*************************** 1. row ***************************
insert('Quadratic',-2,100,'What'): Quadratic
insert('Quadratic',7,3,'What'): QuadraWhat
insert('Quadratic',-1,3,'What'): Quadratic
insert('Quadratic',10,3,'What'): Quadratic
insert('Quadratic',5,-1,''): Quad
insert('Quadratic',7,-1,'What'): QuadraWhat
1 row in set (0.01 sec)

LPAD

声明

LPAD(str, len, padstr)

说明

用指定字符串 padstr,在左侧填充字符串 str到指定长度 len。如果 str长度大于 len,则 str被截断。

例子

obclient> SELECT LPAD('hi',4,'??');
+-------------------+
| LPAD('hi',4,'??') |
+-------------------+
| ??hi |
+-------------------+
1 row in set (0.01 sec)
obclient> SELECT LPAD('hi',1,'??');
+-------------------+
| LPAD('hi',1,'??') |
+-------------------+
| h |
+-------------------+
1 row in set (0.00 sec)

RPAD

声明

RPAD(str, len, padstr)

说明

用指定字符串 padstr,在右侧填充字符串 str到指定长度 len。如果 str长度大于 len,则 str被截断。

例子

obclient> SELECT RPAD('hi',4,'??');
+-------------------+
| RPAD('hi',4,'??') |
+-------------------+
| hi?? |
+-------------------+
1 row in set (0.00 sec)
obclient> SELECT RPAD('hi',1,'??');
+-------------------+
| RPAD('hi',1,'??') |
+-------------------+
| h |
+-------------------+
1 row in set (0.00 sec)

UUID

声明

uuid()

说明

生成一个全局唯一 ID。

例子

obclient> select uuid();
+--------------------------------------+
| uuid() |
+--------------------------------------+
| f756a1f6-4de6-11e8-90af-90b11c53e421 |
+--------------------------------------+
1 row in set (0.00 sec)

BIN

声明

bin(N)

说明

返回数字 N 的二进制形式。

例子

obclient> SELECT BIN(12);
+---------+
| BIN(12) |
+---------+
| 1100 |
+---------+
1 row in set (0.00 sec)

QUOTE

声明

quote(str)

说明

引用一个字符串以产生一个结果可以作为 SQL 语句中正确地转义数据值。返回的字符串由单引号和单引号的各个实例封闭(''),反斜线(''),ASCII NUL 和 Control-Z 前面加一个反斜杠。如果参数为 NULL,则返回值是词 'NULL' 不包括单引号。

例子

obclient> SELECT QUOTE('Don\'t!');
+------------------+
| QUOTE('Don\'t!') |
+------------------+
| 'Don\'t!' |
+------------------+
1 row in set (0.00 sec)
obclient> SELECT QUOTE(NULL);
+-------------+
| QUOTE(NULL) |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)

REGEXP_SUBSTR

声明

REGEXP_SUBSTR(str,pattern,[position[,occurrence[,match_param[,subexpr]]]])

说明

str中搜索匹配正则表达式 pattern的子串,子串不存在返回 NULL。这个函数支持多字节字元。除 match_param外,其他任意参数为 NULL,结果为 NULL。

  • str待搜索的字符串,支持多字节字元。

  • pattern正则表达式,正则表达式规则兼容 MySQL 数据库。

  • position为搜索的开始位置。必须是大于 0 的正整数,小于等于 0 报错,输入为 NULL 返回 NULL,默认值为 1,表示从第一个字符开始搜索。

  • occurrence返回第几次匹配的值。必须是大于等于 0 的正整数,小于等于 0 报错,输入为 NULL 返回 NULL,默认值是 1,表示返回第一次匹配的结果。

  • match_param搜索参数,字符串类型,目前仅支持两个字符 ‘i’,‘c’。i: 代表忽略大小写,c: 代表不忽略,其他字符报错。默认值根据 str字符集的 collection 决定。 为 NULL 时使用默认值。

  • subexpr返回正则表达式中第几个组的值。大于等于 0 的整数,小于 0 则报错。默认值是 0,表示返回满足整个 pattern的子串。

例子

obclient> select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) from dual;
+----------------------------------------------------------------------------------+
| regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) |
+----------------------------------------------------------------------------------+
| have |
+----------------------------------------------------------------------------------+
1 row in set (0.00 sec)
obclient> select regexp_substr('foothebar', 'foo(.*)(bar)', 1, 1, 'c', 1) from dual;
+----------------------------------------------------------+
| regexp_substr('foothebar', 'foo(.*)(bar)', 1, 1, 'c', 1) |
+----------------------------------------------------------+
| the |
+----------------------------------------------------------+
1 row in set (0.01 sec)