閱讀325 返回首頁    go iPhone_iPad_Mac_apple


字符串函數__函數_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必須是字符串,poslen必須是整數。任意參數為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)

刪除字符串所有前綴和(或)後綴。

  • remstrstr必須為字符串或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。若 exprpat 任意一個為 NULL, 則結果為 NULL。 RLIKE 是REGEXP的同義詞。

exprpat參數都必須為字符串或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,則返回一個空字符串。

strcount 為 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;若strdelim為空字符串,則返回空串;若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,…)

返回參數strstr1,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

  上一篇:go 日期時間函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go 轉換函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲