字符串函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲
OceanBase 1.0字符集為utf8mb4,暫不支持其它字符集。utf8mb4字符集對應的collation支持utf8mb4_bin、utf8mb4_general_ci這兩種,默認為utf8mb4_general_ci。
CONCAT(str1,…,strN)
把一個或多個字符串連接成一個字符串。左右參數都必須是字符串類型或NULL,否則報錯。如果執行成功,則返回連接後的字符串;參數中有一個值是NULL結果就是NULL。
說明:str參數可以是數值類型,係統能隱式轉換為字符串處理。
Oceanbase>select concat('test'), concat('test','OceanBase'), concat('test', 'OceanBase', '1.0'), concat('test','OceanBase','1.0', NULL)G;
*************************** 1. row ***************************
concat('test'): test
concat('test','OceanBase'): testOceanBase
concat('test', 'OceanBase', '1.0'): testOceanBase1.0
concat('test','OceanBase','1.0', NULL): NULL
1 row in set (0.00 sec)
SUBSTRING
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
和SUBSTR同語義。
SUBSTR
SUBSTR(str,pos,len)
SUBSTR(str,pos)
SUBSTR(str FROM pos)
SUBSTR (str FROM pos FOR len)
返回一個子字符串,起始於位置pos,長度為len。使用FROM的格式為標準SQL語法。
str必須是字符串,pos和len必須是整數。任意參數為NULL,結果總為NULL。
str中的中文字符被當做字節流看待。
不帶有len參數的時,則返回的子字符串從pos位置開始到原字符串結尾。
pos值為負數時,pos的位置從字符串的結尾的字符數起;為0時,可被看做1。
當len小於等於0,或者pos指示的字符串位置不存在字符時,返回結果為空字符串。
Oceanbase>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.00 sec)
TRIM
TRIM([[{BOTH | LEADING | TRAILING}] [remstr] FROM] str)
刪除字符串所有前綴和(或)後綴。
remstr和str必須為字符串或NULL類型。當參數中有NULL時結果總為NULL。
若未指定BOTH、LEADIN或TRAILING,則默認為BOTH。
remstr為可選項,在未指定情況下,刪除空格。
Oceanbase>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)
LENGTH(str)
返回字符串的長度,單位為字節。參數必須是字符串類型或NULL,否則報錯。 如果執行成功,結果是INT型整數,表示字符串長度;當參數是NULL結果為NULL。
str參數為數值類型時,係統能隱式轉換為字符串類型。
Oceanbase>SELECT LENGTH('text');
+----------------+
| LENGTH('text') |
+----------------+
| 4 |
+----------------+
1 row in set (0.00 sec)
Oceanbase>select length(-1.23);
+---------------+
| length(-1.23) |
+---------------+
| 5 |
+---------------+
1 row in set (0.00 sec)
Oceanbase>select length(1233e);
ERROR 1054 (42S22): Unknown column '1233e' in 'field list'
UPPER(str)
將字符串轉化為大寫字母的字符。參數必須是字符串類型。若為NULL,結果總為NULL。
str參數為數值類型時,能隱式轉換為字符串類型。
由於中文編碼的字節區間與ASCII大小寫字符不重合,對於中文,UPPER可以很好的兼容。
Oceanbase>SELECT UPPER('OceanBase您好!');
+-----------------------------+
| UPPER('OceanBase您好!') |
+-----------------------------+
| OCEANBASE您好! |
+-----------------------------+
1 row in set (0.00 sec)
Oceanbase>select upper(e);
ERROR 1054 (42S22): Unknown column 'e' in 'field list'
Oceanbase>select upper(1.235.);
ERROR 1064 (42000): You have an error in your SQL syntax;
LOWER(str)
將字符串轉化為小寫字母的字符。參數必須是字符串類型。若為NULL,結果總為NULL。
str參數為數值類型時,能隱式轉換為字符串類型。
由於中文編碼的字節區間與ASCII大小寫字符不重合,對於中文,LOWER可以很好的兼容。
Oceanbase>SELECT LOWER('OceanBase您好!');
+-----------------------------+
| LOWER('OceanBase您好!') |
+-----------------------------+
| oceanbase您好! |
+-----------------------------+
1 row in set (0.00 sec)
Oceanbase>select lower(1.23) ;
+-------------+
| lower(1.23) |
+-------------+
| 1.23 |
+-------------+
1 row in set (0.00 sec)
Oceanbase>select lower(1.23h);
ERROR 1583 (42000): Incorrect parameters in the call to native function 'lower'
Oceanbase>select lower(1.23e);
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'lower'
HEX(str)
將字符串轉化為十六進製數顯示。輸入為NULL時,輸出也為NULL。
當str是數值時,輸出整數的十六進製表示;
當str輸入是字符串的時候,返回值為str的十六進製字符串表示,其中每個str裏的每個字符被轉化為兩個十六進製數字。
Oceanbase>SELECT HEX(255);
-> FF
Oceanbase>SELECT HEX('abc');
-> 616263
Oceanbase>SELECT HEX('OceanBase'),
-> HEX(123),
-> HEX(0x0123);
+--------------------+----------+-------------+
| HEX('OceanBase') | HEX(123) | HEX(0x0123) |
+--------------------+----------+-------------+
| 4F6365616E42617365 | 7B | 0123 |
+--------------------+----------+-------------+
1 row in set (0.01 sec)
Oceanbase>select hex(0x012);
+------------+
| hex(0x012) |
+------------+
| 0012 |
+------------+
1 row in set (0.00 sec)
UNHEX(str)
HEX(str)的反向操作,即將參數中的每一對十六進製數字理解為一個數字,並將其轉化為該數字代表的字符。結果字符以二進製字符串的形式返回。
str必須是字符串類型或NULL。當str是合法的十六進製值時將按照十六進製到字節流的轉換算法進行,當str不是十六進製字符串的時候返回NULL。當str為NULL的時候輸出是NULL。
Oceanbase>SELECT HEX('OceanBase'),
-> UNHEX('4f6365616e42617365'),
-> UNHEX(HEX('OceanBase')),
-> UNHEX(NULL)G;
*************************** 1. row ***************************
HEX('OceanBase'): 4F6365616E42617365
UNHEX('4f6365616e42617365'): OceanBase
UNHEX(HEX('OceanBase')): OceanBase
UNHEX(NULL): NULL
1 row in set (0.00 sec)
Oceanbase>select unhex(abc);
ERROR 1054 (42S22): Unknown column 'abc' in 'field list';
INT2IP(int_value)
注:INT2IP為OceanBase特有函數。
將一個整數轉換成IP地址。
- 輸入數據類型必須為INT。若輸入為NULL,則輸出為NULL。若輸入的數字大於MAX_INT32或小於0則輸出為NULL。
Oceanbase>SELECT INT2IP(16777216),
-> HEX(16777216),
-> INT2IP(1);
+------------------+---------------+-----------+
| INT2IP(16777216) | HEX(16777216) | INT2IP(1) |
+------------------+---------------+-----------+
| 1.0.0.0 | 1000000 | 0.0.0.1 |
+------------------+---------------+-----------+
1 row in set (0.00 sec)
IP2INT('ip_addr')
注:IP2INT為OceanBase特有函數。
將字符串表示的IP地址轉換成整數內碼表示。
輸入數據類型必須為字符串類型。若輸入為NULL,則輸出為NULL。若輸入的IP地址不是一個正確的IP地址(包含非數字字符,每一個ip segment的數值大小超過256等),則輸出為NULL。
僅支持ipv4地址,暫不支持ipv6地址。
Oceanbase>SELECT IP2INT('0.0.0.1'),
-> HEX(IP2INT('0.0.0.1')),
-> HEX(IP2INT('1.0.0.0')),
-> IP2INT('1.0.0.257')G;
*************************** 1. row ***************************
IP2INT('0.0.0.1'): 1
HEX(IP2INT('0.0.0.1')): 1
HEX(IP2INT('1.0.0.0')): 1000000
IP2INT('1.0.0.257'): NULL
1 row in set (0.01 sec)
[NOT] LIKE str2 [ESCAPE str3]
字符串通配符匹配。左右參數都必須是字符串類型或NULL,否則報錯。如果執行成功,結果是TRUE或者FALSE,或某一個參數是NULL結果就是NULL。
通配符包括“%”和“_”:
“%”表示匹配任何長度的任何字符,且匹配的字符可以不存在。
“_”表示隻匹配單個字符,且匹配的字符必須存在。
如果你需要查找“a_c”,而不是“abc”時,可以使用OceanBase的轉義字符“\”,即可以表示為“a\_c”。
ESCAPE用於定義轉義符,即表示如果str2中包含str3,那麼在匹配時,str3後的字符為普通字符處理,例如:LIKE 'abc%' ESCAPE 'c',此時“c”為轉義符,而“%”為普通字符,不再作為轉義字符,本語句匹配的字符串為“ab%”。
Oceanbase>SELECT 'ab%' LIKE 'abc%' ESCAPE 'c';
+------------------------------+
| 'ab%' LIKE 'abc%' ESCAPE 'c' |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.00 sec)
用ESCAPE定義轉義符時,長度為1的字符串; 且 % 和 _ 不能用來作為轉義字符。
Oceanbase>select 'a_c' like 'a\_c';
+--------------------+
| 'a_c' like 'a\_c' |
+--------------------+
| 1 |
+--------------------+
1 row in set (0.00 sec)
Oceanbase>select 'abc_' like 'abcdd_' escape 'dd';
ERROR 1064 (42000): Incorrect arguments to ESCAPE
expr [NOT] REGEXP | RLIKE pat
執行字符串表達式expr和模式pat的模式匹配。若expr匹配 pat,則返回 1; 否則返回0。若 expr 或 pat 任意一個為 NULL, 則結果為 NULL。 RLIKE 是REGEXP的同義詞。
expr和pat參數都必須為字符串或NULL,支持隱式轉換成字符串類型。數據類型不匹配的,報錯。PATTERN必須為合法的正則表達式,否則報錯。
Oceanbase>select 1234 regexp 1;
+---------------+
| 1234 regexp 1 |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)
Oceanbase>select 'hello' rlike 'h%';
+---------------------+
| 'hello' rlike 'h%' |
+---------------------+
| 0 |
+---------------------+
1 row in set (0.00 sec)
Oceanbase>select 1234 regexp ^y;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax to use near '^y' at line 1
Oceanbase>select yunzhi regexp '^y';
ERROR 1054 (42S22): Unknown column 'yunzhi' in 'field list'
Oceanbase>select 'hello' not rlike '*h*';
ERROR 1139 (42000): Got error 'empty (sub)expression' from regexp
REPEAT(str, count)
返回一個由重複count次數的字符串str組成的字符串 。 若 count <= 0,則返回一個空字符串。
若str 或 count 為 NULL,則返回 NULL。
str為數值類型時,係統隱式轉換為字符串類型。
count支持隱式轉換成數值類型,如果轉換失敗,則相當於count為0。
Oceanbase>select repeat('1',-1), repeat(null,null),repeat('test',4);
+----------------+-------------------+------------------+
| repeat('1',-1) | repeat(null,null) | repeat('test',4) |
+----------------+-------------------+------------------+
| | NULL | testtesttesttest |
+----------------+-------------------+------------------+
1 row in set (0.00 sec)
Oceanbase>select repeat(11111,'2');
+-------------------+
| repeat(11111,'2') |
+-------------------+
| 1111111111 |
+-------------------+
1 row in set (0.00 sec)
SUBSTRING_INDEX(str, delim, count)
在定界符 delim 以及count 出現前,從字符串str返回字符串。若count為正值,則返回最終定界符(從左邊開始)左邊的一切內容。若count為負值,則返回定界符(從右邊開始)右邊的一切內容。任意一個參數為NULL,返回NULL;若str或delim為空字符串,則返回空串;若count=0,返回空串。
str, delim, count參數支持數值與字符串的隱式轉換。
Oceanbase>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(substr,str) , LOCATE(substr,str,pos)
第一個語法返回字符串 str中子字符串substr的第一個出現位置。第二個語法返回字符串str中子字符串substr的第一個出現位置, 起始位置在pos。如若substr 不在str中,則返回值為0。
Oceanbase>SELECT LOCATE('bar', 'foobarbar');
-> 4
Oceanbase>SELECT LOCATE('xbar', 'foobar');
-> 0
Oceanbase>SELECT LOCATE('bar', 'foobarbar',5);
-> 7
INSTR(str,substr)
返回字符串str中子字符串的第一個出現位置。這和LOCATE()的雙參數形式相同,除非參數的順序被顛倒。
Oceanbase>SELECT INSTR('foobarbar', 'bar');
-> 4
Oceanbase>SELECT INSTR('xbar', 'foobar');
-> 0
REPLACE(str, from_str, to_str)
返回字符串str以及所有被字符to_str替代的字符串from_str。
Oceanbase>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(str,str1,str2,str3,…)
返回參數str在str1,str2,str3,…列表中的索引位置(從1開始的位置)。在找不到str的情況下,返回值為0。
如果所有的對於FIELD()的參數均為字符串,則所有參數均按照字符串進行比較。如果所有的參數均為數字,則按照數字進行比較。否則,參數均按照double類型進行比較。
如果str為NULL,則返回值為0,原因是NULL不能同任何值進行同等比較。FILED()是ELT()的補數。
Oceanbase>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(N, str1, str2, str3,…)
若N=1,則返回值為str1, 若N=2,則返回值為str2,以此類推。若N小於1或大於參數的數目,則返回值為NULL。ELT()是FIELD()的補數。
Oceanbase>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 (str1,pos,len,str2)
返回字符串str1, 字符串中起始於pos位置,長度為len的子字符串將被str2取代。如果 pos 超過字符串長度,則返回值為原始字符串。 假如 len 的長度大於其它字符串的長度,則從位置pos開始替換。若任何一個參數為null,則返回值為NULL。這個函數支持多字節字元。
- str1和str2必須是字符串,pos和len必須是整數。任意參數為 NULL,結果總為 NULL。
- str1和str2中的文字符被當做字節流看待。
- pos 值為負數或者大於 str1 長度時,返回 str1;
- 當len小於0,或大於 str1 的長度時,返回結果為str1從開頭到pos位置的串,和str2的組合串。
Oceanbase>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)
最後更新:2016-11-23 16:03:54
上一篇:
日期時間函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲
下一篇:
轉換函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲
曆史發展__產品簡介_加密服務-阿裏雲
簡單下載示例__SDK示例_批量數據通道_大數據計算服務-阿裏雲
搜索相關性函數__應用高級配置_產品使用手冊_開放搜索-阿裏雲
刪除隻讀賬戶__數據庫管理_開放API_分布式關係型數據庫 DRDS-阿裏雲
更新編排模板__鏡像與模板管理_用戶指南_容器服務-阿裏雲
設置頁麵優化__配置操作接口_API 手冊_CDN-阿裏雲
阿裏雲引入AI力量智能護航金磚會議;百度AI走進平穀桃園,智能分揀機助力農業發展
Python 收發消息__HTTP 接入(簡單)_消息隊列 MQ-阿裏雲
阿裏雲棲大會今天開始,153億暗中瘋狂調倉,二次上攻成功將再上3400點,提示和熱點前瞻!
查詢API分組詳情__API分組相關接口_API_API 網關-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲