暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术分享|GBase 8a字符串函数

天之痕 2022-01-21
3293

1.1 字符串函数

对于操作字符串位置的函数,第一个位置被标记为1。

1.1.1 ASCII(str)

返回字符串str首字符的ASCII码值。

如果str是一个空字符串,那么返回值为0。

如果str是一个NULL,返回值为NULL。

ASCII()只适合数值在0和255之间的字符。

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

gbase> SELECT ASCII('2') FROM t;

+------------+

| ASCII('2') |

+------------+

|         50 |

+------------+

1 row in set

 

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

gbase> SELECT ASCII('dx') FROM t;

+-------------+

| ASCII('dx') |

+-------------+

|         100 |

+-------------+

1 row in set

 

1.1.2 CHAR_LENGTH(str)

返回字符串str的字符长度,以字符进行计算。

示例1:返回“text”的字符长度。

gbase> SELECT CHAR_LENGTH('text') FROM t;

+---------------------+

| CHAR_LENGTH('text') |

+---------------------+

|                   4 |

+---------------------+

1 row in set

 

示例2:返回“南大通用”的字符长度。

gbase> SELECT CHAR_LENGTH('南大通用') FROM t;

+-------------------------+

| CHAR_LENGTH('南大通用') |

+-------------------------+

|                       4 |

+-------------------------+

1 row in set

 

1.1.3 CHARACTER_LENGTH(str)

等价于CHAR_LENGTH()。

1.1.4 CONCAT(str1,str2)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。仅支持两个参数。

示例1:连接字符串“GBa”,“se”。

gbase> SELECT CONCAT('GBa', 'se') FROM t;

+-------------------------+

| CONCAT('GBa', 'se') |

+-------------------------+

| GBase                   |

+-------------------------+

1 row in set

 

示例2:任何一个参数为NULL,返回值为NULL。

gbase> SELECT CONCAT('GB', NULL) FROM t;

+--------------------------+

| CONCAT('GB', NULL, 'se') |

+--------------------------+

| NULL                     |

+--------------------------+

1 row in set

 

 

示例3:“'a'||'b'”等价于CONCAT(str1,str2)。

gbase> SELECT 'GBa' || 'se' FROM t;

+---------------------+

| 'GBa' || 'se' |

+---------------------+

| GBase               |

+---------------------+

1 row in set

 

1.1.5 HEX(N)

N是一个数字返回它的十六进制字符串形式,在这里,N是一个BIGINT数。示例1:N为数字。

gbase> SELECT HEX(255) FROM t;

 +------------+

 | HEX(255)   |

 +------------+

 | 0x000000FF |

 +------------+

 1 row in set

 

1.1.6 INSTR()

INSTR(str,substr)

INSTR(str,substr,start_position,nth_appearance)

第一种语法功能:

返回子串substr在字符串str(左端开始)第一次出现的位置。

注意,subtr在sub中的位置,以1开始计数。

第二种语法相对于第一种,新增如下功能:

1)查找第N个匹配字符串的功能。

2)从母串的第M个字符开始查找匹配字符串的功能。

3)支持第三个参数start_position为负数的情况,即从母串右端第|start_position|个位置反向查找子串的功能

参数说明:

str:字符串母串;

substr:子串;

start_position:表示从字符串(左端)第几个字符开始匹配, 如是负数,则从右端往前查找子串。可选参数,默认为1;

nth_appearance:从start_position开始向字符串尾方向查找第几个匹配字符串。可选参数,默认为1;

 

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

gbase> SELECT INSTR('foobarbar', 'bar') FROM t;

+---------------------------+

| INSTR('foobarbar', 'bar') |

+---------------------------+

|                         4 |

+---------------------------+

1 row in set

 

示例2:“foobar”不在“xbar”中。

gbase> SELECT INSTR('xbar', 'foobar') FROM t;

+-------------------------+     

| INSTR('xbar', 'foobar') |

+-------------------------+

|                       0 |

+-------------------------+

1 row in set

 

示例3:默认则是大小写敏感的。

gbase> SELECT INSTR('foobarbar', 'Bar') FROM t;

+----------------------------------+

| INSTR('foobarbar', 'Bar') |

+----------------------------------+

|                                0 |

+----------------------------------+

1 row in set

示例4:从字符串“welcometobeijing”第三个字符开始匹配,查找 “bei”第一次出现的位置。

gbase> select INSTR ('welcometobeijing','bei',3);

+-----------------------------------+

| instr('welcometobeijing','bei',3) |

+-----------------------------------+

|                                10 |

+-----------------------------------+

1 row in set

示例5:从字符串“112111222222333333”第一个字符开始匹配,查找第二个“11”出现的位置。

gbase> select INSTR ('112111222222333333','11',1,2);

+--------------------------------------+

| instr('112111222222333333','11',1,2) |

+--------------------------------------+

|                                    4 |

+--------------------------------------+

1 row in set

示例6:从字符串“welcometochina”倒数第一个字符开始匹配,查找第一个“e”出现的位置。

gbase> select INSTR ('welcometochina','e',-1,1);

+----------------------------------+

| instr('welcometochina','e',-1,1) |

+----------------------------------+

|                                7 |

+----------------------------------+

1 row in set

1.1.7 LCASE(str)

依照当前字符集设置映射,将字符串str中的所有字符改变为小写形式。

示例1:将“QUADRATICALLY”转为小写形式。

gbase> SELECT LCASE('QUADRATICALLY') FROM t;

+------------------------+

| LCASE('QUADRATICALLY') |

+------------------------+

| quadratically          |

+------------------------+

1 row in set

 

1.1.8 LEFT(str,len)

返回字符串str中最左边的len个字符。

示例1:返回“foobarbar”左边五个字符。

gbase> SELECT LEFT('foobarbar', 5) FROM t;

+----------------------+

| LEFT('foobarbar', 5) |

+----------------------+

| fooba                |

+----------------------+

1 row in set

注意, 若 len 为 0 , 将返回 NULL,如:

gbase> SELECT LEFT('foobarbar', 0) from tt;
    +----------------------+
    | LEFT('foobarbar', 0) |
    +----------------------+
    | NULL |
    +----------------------+
    1 row in set (Elapsed: 00:00:00.05)

 

 

1.1.9 LENGTH(str)

返回字符串str的长度,以字节进行计算。计算不包括任何托尾的空格。

示例1:返回“text”的字节长度。

gbase> SELECT LENGTH('text') FROM t;

+----------------+

| LENGTH('text') |

+----------------+

|              4 |

+----------------+

1 row in set

 

示例2:返回“南大通用”的字节长度。

gbase> SELECT LENGTH('南大通用') FROM t;

+------------------------+

| LENGTH('南大通用')     |

+------------------------+

|                     12 |

+------------------------+

1 row in set

示例3:计算不包括任何托尾的空格。

gbase> SELECT LENGTH('abc    ') FROM t;

+------------------------+

| LENGTH('abc    ')     |

+------------------------+

|                     3 |

+------------------------+

1 row in set

 

 

 

注意, 参数 str 只支持字符串数据类型,如 char, varchar 等,非字符串数据类型不支持,如 int, date等不支持。

1.1.10 LOWER(str)

依照当前字符集设置映射,将字符串str中的所有字符改变为小写形式。

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

gbase> SELECT LOWER('QUADRATICALLY'),LCASE('QUADRATICALLY') FROM t;

+------------------------+------------------------+

| LOWER('QUADRATICALLY') | LCASE('QUADRATICALLY') |

+------------------------+------------------------+

| quadratically          | quadratically          |

+------------------------+------------------------+

1 row in set

 

1.1.11 LPAD(str,len,padstr)

用字符串padstr在str的左边填补,直至它的长度达到len个字符长度,然后返回str。

如果str的长度长于len,那么它将被截除到len个字符。

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

gbase> SELECT LPAD ('hi',4,'??') FROM t;

+-------------------+

| LPAD('hi',4,'??') |

+-------------------+

| ??hi              |

+-------------------+

1 row in set

 

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

gbase> SELECT LPAD('hi',1,'??') FROM t;

+-------------------+

| LPAD('hi',1,'??') |

+-------------------+

| h                 |

+-------------------+

1 row in set

 

1.1.12 LTRIM(str)

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

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

gbase> SELECT LTRIM('  barbar') FROM t;

+-------------------+

| LTRIM('  barbar') |

+-------------------+

| barbar            |

+-------------------+

1 row in set

 

1.1.13 NVL(string1,replace_with)

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

示例1:address列的值为NULL,返回“UNKOWN”,否则返回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

 

 

1.1.14 REPLACE(str,from_str,to_str)

返回的结果是将str中所有出现的from_str替换为to_str后的字符串。

示例1:将“www.generaldata.com.cn”中所有出现的“w”替换为“Ww”。

gbase> SELECT REPLACE('www.generaldata.com.cn', 'w', 'Ww') FROM t;

+----------------------------------------------+

| REPLACE('www.generaldata.com.cn', 'w', 'Ww') |

+----------------------------------------------+

| WwWwWw.generaldata.com.cn                    |

+----------------------------------------------+

1 row in set

 

1.1.15 REVERSE(str)

返回字符顺序和str相反的字符串。

示例1:将“abc”按从右到左的顺序输出。

gbase> SELECT REVERSE('abc') FROM t;

+----------------+

| REVERSE('abc') |

+----------------+

| cba            |

+----------------+

1 row in set

 

1.1.16 RIGHT(str,len)

返回字符串str中最右边的len个字符。

示例1:返回“foobarbar”最右边的4个字符。

gbase> SELECT RIGHT('foobarbar', 4) FROM t;

+-----------------------+

| RIGHT('foobarbar', 4) |

+-----------------------+

| rbar                  |

+-----------------------+

1 row in set

 

1.1.17 RPAD(str,len,padstr)

用字符串padstr对str进行右边填补,直至它的长度达到len个字符长度,然后返回str。

如果str的长度长于len,那么它将被截取到len个字符。

示例1:在“hi”的右边补充“?”,直到长度为5位。

gbase> SELECT RPAD('hi',5,'?') FROM t;

+------------------+

| RPAD('hi',5,'?') |

+------------------+

| hi???            |

+------------------+

1 row in set

 

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

gbase> SELECT RPAD('hiacd',2,'?') FROM t;

+------------------+

| RPAD('hi',2,'?') |

+------------------+

| hi               |

+------------------+

1 row in set

 

1.1.18 RTRIM(str)

返回移除字符串str最右边多余空格后的字符串。

示例1:移除“barbar   ”最右边的多余空格。

gbase> SELECT RTRIM('barbar   ') FROM t;

+--------------------+

| RTRIM('barbar   ') |

+--------------------+

| barbar             |

+--------------------+

1 row in set

 

1.1.19 SUBSTRING()

SUBSTRING(str,pos)

SUBSTRING(str,pos,len)

没有len参数的SUBSTRING()函数从字符串str的pos位置起返回子串。

带有len参数的SUBSTRING()函数从字符串str的pos位置起返回len个字符的子串。

pos可以是负值。在这种情况下,子串的起始位置是从字符串的尾部pos位置。

如果len为小于1的值,返回结果始终为空串。

示例1:返回“Quadratically”从第5位开始的子串。

gbase> SELECT SUBSTRING('Quadratically',5) FROM t;

+------------------------------+

| SUBSTRING('Quadratically',5) |

+------------------------------+

| ratically                    |

+------------------------------+

1 row in set

 

示例2:返回“Quadratically”从第5位开始的6个字符。

gbase> SELECT SUBSTRING('Quadratically',5,6) FROM t;

+--------------------------------+

| SUBSTRING('Quadratically',5,6) |

+--------------------------------+

| ratica                         |

+--------------------------------+

1 row in set

 

示例3:pos为“-3”,则返回的子串是“Sakila”尾部的3个字符。

gbase> SELECT SUBSTRING('Sakila', -3) FROM t;

+-------------------------+

| SUBSTRING('Sakila', -3) |

+-------------------------+

| ila                     |

+-------------------------+

1 row in set

 

示例4:pos为“-5”,len为“3”,则返回的子串为“Sakila”从第2位开始的3个字符。

gbase> SELECT SUBSTRING('Sakila', -5, 3) FROM t;

+----------------------------+

| SUBSTRING('Sakila', -5, 3) |

+----------------------------+

| aki                        |

+----------------------------+

1 row in set

 

1.1.20 SUBSTRING_INDEX(str,delim,count)

返回字符串str中在第count个分隔符delim之前的子串。

如果count是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。

如果count是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符。

示例1:count是正数,返回从分隔符“.”到左边的所有字符。

gbase> SELECT SUBSTRING_INDEX('www.generaldata.com.cn', '.', 2) FROM t;

+---------------------------------------------------+

| SUBSTRING_INDEX('www.generaldata.com.cn', '.', 2) |

+---------------------------------------------------+

| www.generaldata                                   |

+---------------------------------------------------+

1 row in set

 

示例2:count是负数,返回从分隔符“.”到右边的所有字符。

gbase> SELECT SUBSTRING_INDEX('www.generaldata.com.cn', '.', -3) FROM t;

+----------------------------------------------------+

| SUBSTRING_INDEX('www.generaldata.com.cn', '.', -3) |

+----------------------------------------------------+

| generaldata.com.cn                                 |

+----------------------------------------------------+

1 row in set

 

1.1.21 TO_CHAR(number,[FORMAT])

将参数number转换为字符串,并进行格式化输出。

如果number的位数大于格式化参数FORMAT的参数,结果将以“#”显示。

格式化参数及含义如下表所示。

格式化参数

含  义

,

一般作为分组符号使用,将number参数格式化为数位格式字符串输出,例如千位一分组,也可以按百位、十位一分组。通常与0、9、“.”配合使用。

示例:99,999。

.

将number参数格式化为小数形式的字符串输出。只能出现一次。通常与0、9、“,”配合使用。

示例:999.99。

$

转换为美元货币含义的字符串,只能出现在最前。

示例:$999。

0

占位符,格式化number,如果参数number的位数少于格式化的位数,则显示0补足位。注意:0的优先级高于9。

示例:000。

9

占位符,格式化number,一旦参数number的位数,少于格式化的位数,则用空格补足位。

示例:999。

EEEE、eeee

按照科学计数法输出。

示例:9.99EEEE。

X、x

转换为16进制。每个X代表16进制的一位。

例如:XX,代表两位16进制数。

如果number,转换成16进制数大于X的个数,则输出“#”。

注意:数值必须是大于等于0的整数。前面只能和0或者FM组合使用。

 

示例1:以百位作为分组。

gbase> SELECT TO_CHAR(987654321,'999,999,999') FROM t;

+----------------------------------+

| TO_CHAR(987654321,'999,999,999') |

+----------------------------------+

|  987,654,321                     |

+----------------------------------+

1 row in set

 

示例2:用空格位补足数值位。

gbase> SELECT TO_CHAR(54321,'999,999,999') FROM t;

+------------------------------+

| TO_CHAR(54321,'999,999,999') |

+------------------------------+

|       54,321                 |

+------------------------------+

1 row in set

 

示例3:因为0的优先级高于9,所以十万位和百万位均以0显示,千万位和亿位以空格显示。

gbase> SELECT TO_CHAR(54321,'990,999,999') FROM t;

+------------------------------+

| TO_CHAR(54321,'990,999,999') |

+------------------------------+

|    0,054,321                 |

+------------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(-54321,'990,999,999') FROM t;

+-------------------------------+

| TO_CHAR(-54321,'990,999,999') |

+-------------------------------+

|   -0,054,321                  |

+-------------------------------+

1 row in set

 

示例4:小数格式化输出。

gbase> SELECT TO_CHAR(12.97,'099.99') FROM t;

+-------------------------+

| TO_CHAR(12.97,'099.99') |

+-------------------------+

|  012.97                 |

+-------------------------+

1 row in set

 

示例5:小数格式化输出,小数位补足三位。

因为0的优先级高于9,所以不论是090还是099,都按照3位小数格式化输出,补足位用0补足。

gbase> SELECT TO_CHAR(-12.97,'099.090') FROM t;

+---------------------------+

| TO_CHAR(-12.97,'099.090') |

+---------------------------+

| -012.970                  |

+---------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(12.97,'099.099') FROM t;

+--------------------------+

| TO_CHAR(12.97,'099.099') |

+--------------------------+

|  012.970                 |

+--------------------------+

1 row in set

 

示例6:按美元含义格式化输出,$格式化符号只能出现在最前位置。

gbase> SELECT TO_CHAR(84.77,'$0099.99') FROM t;

+---------------------------+

| TO_CHAR(84.77,'$0099.99') |

+---------------------------+

|  $0084.77                 |

+---------------------------+

1 row in set

 

 

 

示例8:FORMAT的值为“9.9EEEE”,由于是科学计算方法,所以小数位前面加一个9或者0即可,多个是没有意义的。

gbase> SELECT TO_CHAR(2008032001,'9.9EEEE') FROM t;

+-------------------------------+

| TO_CHAR(2008032001,'9.9EEEE') |

+-------------------------------+

|   2.0E+09                     |

+-------------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(2008032001,'c9.99EEEE') FROM t;

+---------------------------------+

| TO_CHAR(2008032001,'c9.99EEEE') |

+---------------------------------+

|   $2.01E+09                     |

+---------------------------------+

1 row in set

 

 

gbase> SELECT TO_CHAR(10.3,'90.9') FROM t;

+----------------------+

| TO_CHAR(10.3,'90.9') |

+----------------------+

|  10.3                |

+----------------------+

1 row in set

 

 

示例11:FORMAT的值为“X”,返回number的十六进制形式。

gbase> SELECT TO_CHAR(11,'X') FROM t;

+-----------------+

| TO_CHAR(11,'X') |

+-----------------+

|  B              |

+-----------------+

1 row in set

 

gbase> SELECT TO_CHAR(16,'XX') FROM t;

+------------------+

| TO_CHAR(16,'XX') |

+------------------+

|  10              |

+------------------+

1 row in set

 

number转换成16进制数大于X的个数,则输出“#”。

gbase> SELECT TO_CHAR(16,'X') FROM t;

+-----------------+

| TO_CHAR(16,'X') |

+-----------------+

| ##              |

+-----------------+

1 row in set

 

1.1.22 TO_CHAR(datetime,[FORMAT])

将参数datetime转换为字符串,并进行格式化输出。

格式化参数及含义如下表所示。

格式化参数

含  义

, . ; :

除了左面标准的几个,还允许用文字作为分割符号。例如年月日 日期分隔符。用于格式化输出日期。

AM

上午的简写,同PM,P.M.(下午),中文环境输出为上午。

如果是上午,返回AM。

如果是下午,返回PM。

BC

即拉丁文Before Christ的简写,表示公元前,会根据nls的不同转换为公元或者BC等。

如果是公元后的日期,显示AD。

如果是公元前的日期,显示BC。

CC

返回世纪,以阿拉伯数字表示。

D

一周之中的第几天,返回的是序号(1~7)。

DAY

返回日期中的DAY部分。返回的是英文全拼形式,首字母大写。

DD

同DAY,但是返回的是数字形式(01~31)。

DDD

日期中的日是一年当中的第几天,返回的是序号001~366。

HH[12 | 24]

表示小时,默认12小时制。

HH12,12小时制。返回(01~12)。

HH24,24小时制。返回(00~23)。

IW

ISO标准的一年中的第几周(1~52,或者1~53)。

MI

返回分钟数(00~59)。

MM

返回月份,返回阿拉伯数字。

MON

返回月份,返回的是英文简写,三个英文字母,首字母大写。

MONTH

返回月份,返回的是英文全拼。首字母大写。

PM

下午的简写,中文环境输出为下午。

SCC

返回数字形式表示的世纪。

SS

返回秒(0~59)。

 

示例1:将NOW()转换为FORMAT中对应的日期格式。

gbase> SELECT TO_CHAR(NOW(),'YYYY/MM/DD') FROM t;

+-----------------------------+

| TO_CHAR(NOW(),'YYYY/MM/DD') |

+-----------------------------+

| 2013/10/11                  |

+-----------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(NOW(),'YYYY-MM-DD') FROM t;

+-----------------------------+

| TO_CHAR(NOW(),'YYYY-MM-DD') |

+-----------------------------+

| 2013-10-11                  |

+-----------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(NOW(),'YYYY,MM,DD') FROM t;

+-----------------------------+

| TO_CHAR(NOW(),'YYYY,MM,DD') |

+-----------------------------+

| 2013,10,11                  |

+-----------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(CURDATE(),'YYYY;MM;DD') FROM t;

+---------------------------------+

| TO_CHAR(CURDATE(),'YYYY;MM;DD') |

+---------------------------------+

| 2013;10;11                      |

+---------------------------------+

1 row in set

 

gbase> SELECT TO_CHAR(NOW(),'YYYY年MM月DD日') FROM t;

+---------------------------------------+

| TO_CHAR(NOW(),'YYYY年MM月DD日') |

+---------------------------------------+

| 2013年10月11日                        |

+---------------------------------------+

1 row in set

 

 

示例3:比较NOW()和将NOW()转换为“AM HH12:MI:SS”后的格式。

gbase> SELECT NOW(),TO_CHAR(NOW(),'AM HH12:MI:SS') FROM t;

+---------------------+--------------------------------+

| NOW()               | TO_CHAR(NOW(),'AM HH12:MI:SS') |

+---------------------+--------------------------------+

| 2013-10-11 16:35:43 | PM 04:10:43                    |

+---------------------+--------------------------------+

1 row in set

 

gbase> SELECT NOW(),TO_CHAR(TIMESTAMPADD(HOUR,8,NOW()),'AM HH12:MI:SS') AS f_FormatShow FROM t;

+---------------------+--------------+

| NOW()               | f_FormatShow |

+---------------------+--------------+

| 2013-10-11 16:36:03 | AM 12:10:03  |

+---------------------+--------------+

1 row in set

 

示例4:返回CURDATE()的世纪数。

gbase> SELECT TO_CHAR(CURDATE(),'CC') FROM t;

+-------------------------+

| TO_CHAR(CURDATE(),'CC') |

+-------------------------+

| 21                      |

+-------------------------+

1 row in set

 

示例5:系统默认周日为每周第一天,“2013-11-11”是周五。

FORMAT的值为“D”,返回值为6。

gbase> SELECT CURDATE(),TO_CHAR(CURDATE(),'D') FROM t;

+------------+------------------------+

| CURDATE()  | TO_CHAR(CURDATE(),'D') |

+------------+------------------------+

| 2013-10-11 | 6                      |

+------------+------------------------+

1 row in set

 

FORMAT的值为“DAY”,返回周五的英文全拼形式,首字母大写。

gbase> SELECT CURDATE(),TO_CHAR(CURDATE(),'DAY') FROM t;

+------------+--------------------------+

| CURDATE()  | TO_CHAR(CURDATE(),'DAY') |

+------------+--------------------------+

| 2013-10-11 | Friday                   |

+------------+--------------------------+

1 row in set

 

FORMAT的值为“DD”,返回值为11。

gbase> SELECT CURDATE(),TO_CHAR(CURDATE(),'DD') FROM t;

+------------+-------------------------+

| CURDATE()  | TO_CHAR(CURDATE(),'DD') |

+------------+-------------------------+

| 2013-10-11 | 11                      |

+------------+-------------------------+

1 row in set

 

FORMAT的值为“DDD”,返回“2013-10-11”是2013年的第几天。

gbase> SELECT CURDATE(),TO_CHAR(CURDATE(),'DDD') FROM t;

+------------+--------------------------+

| CURDATE()  | TO_CHAR(CURDATE(),'DDD') |

+------------+--------------------------+

| 2013-10-11 | 284                      |

+------------+--------------------------+

1 row in set

 

 

示例8:FORMAT为“HH”,返回小时。

gbase> SELECT CURRENT_TIMESTAMP(),TO_CHAR(CURRENT_TIMESTAMP(),'HH') FROM t;

+---------------------+-----------------------------------+

| CURRENT_TIMESTAMP() | TO_CHAR(CURRENT_TIMESTAMP(),'HH') |

+---------------------+-----------------------------------+

| 2013-11-22 10:27:07 | 10                                |

+---------------------+-----------------------------------+

1 row in set

 

FORMAT为“HH12”,返回12小时制的小时。

gbase> SELECT NOW(),TO_CHAR(NOW(),'HH12') FROM t;

+---------------------+-----------------------+

| NOW()               | TO_CHAR(NOW(),'HH12') |

+---------------------+-----------------------+

| 2013-11-22 10:27:32 | 10                    |

+---------------------+-----------------------+

1 row in set

 

FORMAT为“HH24”,返回24小时制的小时。

gbase> SELECT NOW(),TO_CHAR(TIMESTAMPADD(HOUR,8,NOW()),'HH24') FROM t;

+---------------------+--------------------------------------------+

| NOW()               | TO_CHAR(TIMESTAMPADD(HOUR,8,NOW()),'HH24') |

+---------------------+--------------------------------------------+

| 2013-11-22 10:28:32 | 18                                         |

+---------------------+--------------------------------------------+

1 row in set

 

 

示例10:FORMAT为“MI”,返回分钟数。

gbase> SELECT NOW(),TO_CHAR(NOW(),'MI') FROM t;

+---------------------+---------------------+

| NOW()               | TO_CHAR(NOW(),'MI') |

+---------------------+---------------------+

| 2013-10-11 17:00:33 | 00                  |

+---------------------+---------------------+

1 row in set

 

示例11:FORMAT为“MM”,“MON”,“MONTH”,以不同形式返回月份。

gbase> SELECT NOW(),TO_CHAR(NOW(),'MM') FROM t;

+---------------------+---------------------+

| NOW()               | TO_CHAR(NOW(),'MM') |

+---------------------+---------------------+

| 2013-10-11 17:01:09 | 10                  |

+---------------------+---------------------+

1 row in set

 

gbase> SELECT NOW(),TO_CHAR(NOW(),'MON') FROM t;

+---------------------+----------------------+

| NOW()               | TO_CHAR(NOW(),'MON') |

+---------------------+----------------------+

| 2013-10-11 17:01:31 | Oct                  |

+---------------------+----------------------+

1 row in set

 

gbase> SELECT NOW(),TO_CHAR(NOW(),'MONTH') FROM t;

+---------------------+------------------------+

| NOW()               | TO_CHAR(NOW(),'MONTH') |

+---------------------+------------------------+

| 2013-10-23 09:44:50 | October                |

+---------------------+------------------------+

1 row in set

 

示例12:FORMAT为“PM HH12:MI:SS”。

gbase> SELECT NOW(),TO_CHAR(NOW(),'PM HH12:MI:SS') FROM t;

+---------------------+--------------------------------+

| NOW()               | TO_CHAR(NOW(),'PM HH12:MI:SS') |

+---------------------+--------------------------------+

| 2013-10-11 17:06:21 | PM 05:10:21                    |

+---------------------+--------------------------------+

1 row in set

 

gbase> SELECT NOW(),TO_CHAR(TIMESTAMPADD(HOUR,8,NOW()),'PM HH12:MI:SS') AS f_FormatShow FROM t;

+---------------------+--------------+

| NOW()               | f_FormatShow |

+---------------------+--------------+

| 2013-11-22 10:40:45 | PM 06:11:45  |

+---------------------+--------------+

1 row in set

 

 

               |

+---------------------+---------------------+

1 row in set

 

 

示例16:FORMAT为“SCC”,返回日期所属的世纪数。

gbase> SELECT NOW(),TO_CHAR(NOW(),'SCC') FROM t;

+---------------------+----------------------+

| NOW()               | TO_CHAR(NOW(),'SCC') |

+---------------------+----------------------+

| 2013-10-11 17:08:12 |  21                  |

+---------------------+----------------------+

1 row in set

 

gbase> SELECT TIMESTAMPADD(YEAR,-20,NOW()) AS f_DATETIME,TO_CHAR(TIMESTAMPADD(YEAR,-20,NOW()),'SCC') AS f_AD FROM t;

+---------------------+------+

| f_DATETIME          | f_AD |

+---------------------+------+

| 1993-10-11 17:08:26 |  20  |

+---------------------+------+

1 row in set

 

1.1.23 TO_NUMBER(expr)

将字符串expr所包含的数据转化为NUMBER型数据。

expr的形式可为任何支持格式的字符串,如“111.0023”,“23,000,000”。

示例1:expr为“-12.340000”。

gbase> SELECT TO_NUMBER('-12.340000') FROM t;

+-------------------------+

| TO_NUMBER('-12.340000') |

+-------------------------+

|                  -12.34 |

+-------------------------+

1 row in set

 

示例2:expr为“12.34”。

gbase> SELECT TO_NUMBER('12.34') FROM t;

+--------------------+

| TO_NUMBER('12.34') |

+--------------------+

|              12.34 |

+--------------------+

1 row in set

 

示例3:expr为“+000000123”。

gbase> SELECT TO_NUMBER('+000000123') FROM t;

+-------------------------+

| TO_NUMBER('+000000123') |

+-------------------------+

|                     123 |

+-------------------------+

1 row in set

 

示例4:expr为“1234”。

gbase> SELECT TO_NUMBER('1234') FROM t;

+-------------------+

| TO_NUMBER('1234') |

+-------------------+

|              1234 |

+-------------------+

1 row in set

 

1.1.24 TRANSLATE(char,from_string,to_string)

将char中包含的from_string字符替换为to_string中的相应字符,然后返回替换后的字符串。

to_string不能省略。

如果from_string比to_string长,那么在from_string中而不在to_string中的额外字符将从char中删除,因为它们没有相应的替换字符。

如果TRANSLATE中的任何参数为NULL,则结果也是NULL。

示例1:from_string长度长于to_string,在from_string中而不在to_string中的额外字符将从char中删除。

gbase> SELECT TRANSLATE('123abc','2dc','4e') FROM t;

+--------------------------------+

| TRANSLATE('123abc','2dc','4e') |

+--------------------------------+

| 143ab                          |

+--------------------------------+

1 row in set

 

因为from_string和to_string的位置是一一对应的,2对应4,d对应e,c没有对应的值,所以c会被删除。字符里的2会替换为4,d因为字符串里没有,不做替换,c由于没有对应的替换字符,所以字符串里的c会被删除。因此输出结果是143ab。

示例2:from_string长度长于to_string,在from_string中而不在to_string中的额外字符将从char中删除。

gbase> SELECT TRANSLATE('13579abc','13a','24') FROM t;

+----------------------------------+

| TRANSLATE('13579abc','13a','24') |

+----------------------------------+

| 24579bc                          |

+----------------------------------+

1 row in set

 

示例3:from_string为NULL,返回值为NULL。

gbase> SELECT TRANSLATE('23',NULL,'a') FROM t;

+--------------------------+

| TRANSLATE('23',NULL,'a') |

+--------------------------+

| NULL                     |

+--------------------------+

1 row in set

 

1.1.25 TRIM

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

移除字符串str中所有的trim_char前缀或后缀,然后将其返回。

如果没有给出任何BOTH、LEADING或TRAILING修饰符,会假定为BOTH。

如果没有指定trim_char,将移除空格。

如果指定了BOTH、LEADING或TRAILING修饰符,trim_char仅支持单个字符。

示例1:没有指定trim_char,将移除空格。

gbase> SELECT TRIM('  bar   ') FROM t;

+------------------+

| TRIM('  bar   ') |

+------------------+

| bar              |

+------------------+

1 row in set

 

示例2:使用LEADING修饰符。

gbase> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx') FROM t;

+------------------------------------+

| TRIM(LEADING 'x' FROM 'xxxbarxxx') |

+------------------------------------+

| barxxx                             |

+------------------------------------+

1 row in set

 

示例3:使用BOTH修饰符。

gbase> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx') FROM t;

+---------------------------------+

| TRIM(BOTH 'x' FROM 'xxxbarxxx') |

+---------------------------------+

| bar                             |

+---------------------------------+

1 row in set

 

示例4:使用TRAILING修饰符。

gbase> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz') FROM t;

+-------------------------------------+

| TRIM(TRAILING 'xyz' FROM 'barxxyz') |

+-------------------------------------+

| barx                                |

+-------------------------------------+

1 row in set

 

1.1.26 UCASE(str)

依照当前字符集设置映射,将字符串str中的所有字符改变为大写,然后返回该值。

示例1:将字符串转为大写。

gbase> SELECT UCASE('Gbase') FROM t;

+----------------+

| UCASE('Gbase') |

+----------------+

| GBASE          |

+----------------+

1 row in set

 

1.1.27 UPPER(str)

依照当前字符集设置映射,将字符串str中的所有字符改变为大写,然后返回该值。

UPPER()等价于UCASE()。

示例1:将字符串转换为大写。

gbase> SELECT UPPER('Hej') FROM t;

+--------------+

| UPPER('Hej') |

+--------------+

| HEJ          |

+--------------+

1 row in set

 

1.1.28 字符串转换类型函数

GBase 8s MPP Cluster会自动地将数字转换到字符串,或是将字符串转换为数字。

如果将一个二进制字符串作为参数传递给一个字符串函数,结果返回也是一个二进制字符串。

一个数字被转换为字符串,该字符串被视为是一个二进制字符串,但有可能会影响最终结果。

示例1:自动地将数字转换到字符串,或是将字符串转换为数字。

gbase> SELECT 1 + '1' FROM t;

+---------+

| 1 + '1' |

+---------+

|       2 |

+---------+

1 row in set

 

gbase> SELECT CONCAT(2,' test') FROM t;

+-------------------+

| CONCAT(2,' test') |

+-------------------+

| 2 test            |

+-------------------+

1 row in set

 

示例2:如果明确需要将一个数字转换为字符串,可以使用CAST()或CONCAT()函数。建议使用CAST()。

gbase> SELECT 38.8, CAST(38.8 AS CHAR(10)) FROM t;

+------+--------------------+

| 38.8 | CAST(38.8 AS CHAR(10)) |

+------+--------------------+

| 38.8 | 38.8               |

+------+--------------------+

1 row in set

 

1.1.29 expr LIKE pat [ESCAPE 'escape-char']

expr LIKE pat [ESCAPE 'escape-char']

使用SQL的简单的正则表达式进行比较的模式匹配。

如果表达式expr匹配pat,返回1(TRUE),否则返回0(FALSE)。

如果expr或pat是NULL,那么结果为NULL。

模式未必就是文字字符串,例如,它可以使用字符串表达式或表列。

可以在模式中使用下面所示的两个通配符与LIKE配合使用:

字  符

含  义

%

匹配任意多个字符,甚至是零个字符。

_

严格地匹配一个字符。

注:区分大小写。

示例1:expr与pat相匹配,通配符为“_”,返回1。

gbase> SELECT 'David!' LIKE 'David_' FROM t;

+------------------------+

| 'David!' LIKE 'David_' |

+------------------------+

|                      1 |

+------------------------+

1 row in set

 

示例2:expr与pat相匹配,通配符为“%”,返回1。

gbase> SELECT 'David!' LIKE '%D%v%' FROM t;

+-----------------------+

| 'David!' LIKE '%D%v%' |

+-----------------------+

|                     1 |

+-----------------------+

1 row in set

 

若要对通配符的文字实例进行检验,可将转义字符放在该字符前面。如果没有指定ESCAPE字符,则假设为“\”。

字符串

含  义

\%

匹配一个%字符。

\_

匹配一个_字符。

 

示例3:expr与pat不匹配,返回0。

gbase> SELECT 'David!' LIKE 'David\_' FROM t;

+-------------------------+

| 'David!' LIKE 'David\_' |

+-------------------------+

|                       0 |

+-------------------------+

1 row in set

 

示例4:转义字符“\_”匹配“_”。

gbase> SELECT 'David_' LIKE 'David\_' FROM t;

+-------------------------+

| 'David_' LIKE 'David\_' |

+-------------------------+

|                       1 |

+-------------------------+

1 row in set

 

示例5:为了指定一个不同的转义字符,可以使用ESCAPE子句。

gbase> SELECT 'David_' LIKE 'David|_' ESCAPE '|' FROM t;

+------------------------------------+

| 'David_' LIKE 'David|_' ESCAPE '|' |

+------------------------------------+

|                                  1 |

+------------------------------------+

1 row in set

 

示例6表明,字符串比较是大小写敏感的。

示例6:

gbase> SELECT 'abc' LIKE 'ABC' FROM t;

+------------------+

| 'abc' LIKE 'ABC' |

+------------------+

|                0 |

+------------------+

1 row in set

 

 

示例8:LIKE允许用在一个数字表达式上。

gbase> SELECT 10 LIKE '1%' FROM t;

+--------------+

| 10 LIKE '1%' |

+--------------+

|            1 |

+--------------+

1 row in set

 

注意:由于GBase 8s MPP Cluster在字符串中使用C转义语法(例如,用“\n”代表一个换行字符),在LIKE字符串中,必须将用到的“\”双写。

例如,若要查找“\n”,必须将其写成“\\n”。而若要查找“\”,则必须将其写成it as ‘\\\\’;。原因是反斜线符号会被语法分析程序剥离一次,在进行模式匹配时,又会被剥离一次,最后会剩下一个反斜线符号接受匹配。

示例9:如果expr或pat是NULL,结果也是NULL。

gbase> SELECT NULL LIKE 'David_', 'David!' LIKE NULL FROM t;

+--------------------+---------------------+

| NULL LIKE 'David_' | 'David!' LIKE NULL  |

+--------------------+---------------------+

|               NULL |                NULL |

+--------------------+---------------------+

1 row in set

 

1.1.30 expr NOT LIKE pat [ESCAPE 'escape-char']

expr NOT LIKE pat [ESCAPE 'escape-char']等价于NOT (expr LIKE pat [ESCAPE 'escape-char'])。

如果表达式expr匹配pat,返回0;否则返回1。

如果expr或pat是NULL,那么结果为NULL。

注:区分大小写。

示例1:expr与pat进行匹配,匹配返回0,不匹配返回1。

gbase> SELECT 'David_' NOT LIKE 'David|_';

+-----------------------------+

| 'David_' NOT LIKE 'David|_' |

+-----------------------------+

|                           1 |

+-----------------------------+

1 row in set

 

gbase> SELECT 'David_' NOT LIKE 'David|_' ESCAPE '|';

+----------------------------------------+

| 'David_' NOT LIKE 'David|_' ESCAPE '|' |

+----------------------------------------+

|                                      0 |

+----------------------------------------+

1 row in set

 

示例2:如果expr或pat是NULL,结果也是NULL。

gbase> SELECT NULL NOT LIKE 'David_', 'David!' NOT LIKE NULL FROM t;

+------------------------+-------------------------+

| NULL NOT LIKE 'David_' | 'David!' NOT LIKE NULL  |

+------------------------+-------------------------+

|                   NULL |                    NULL |

+------------------------+-------------------------+

1 row in set

1.1.31 expr RLIKE pat

依照模式pat对字符串表达式expr执行一个模式比较。

模式可以是一个扩展的正则表达式,文字字符串,也可以是字符串表达式或表列。

如果表达式expr匹配pat,返回1,否则返回0。

示例1:expr与pat不匹配,返回0。

gbase> SELECT 'Monty!' RLIKE 'm%y%%' FROM t;

+-------------------------+

| 'Monty!' RLIKE 'm%y%%' |

+-------------------------+

|                       0 |

+-------------------------+

1 row in set

 

示例2:expr与pat相匹配,返回1。

gbase> SELECT 'Monty!' RLIKE '.*' FROM t;

+----------------------+

| 'Monty!' RLIKE '.*' |

+----------------------+

|                    1 |

+----------------------+

1 row in set

 

示例3:expr与pat相匹配,返回1。表达式中包含转义字符。

gbase> SELECT 'new*\n*line' RLIKE 'new\\*.\\*line' FROM t;

+---------------------------------------+

| 'new*\n*line' RLIKE 'new\\*.\\*line' |

+---------------------------------------+

|                                     1 |

+---------------------------------------+

1 row in set

 

1.1.32 expr NOT RLIKE pat

如果表达式expr匹配pat,返回0;否则返回1。

如果expr或pat是NULL,那么结果为NULL。

示例1:expr与pat不匹配,返回1。

gbase>  SELECT NOT ('Monty!' RLIKE 'm%y%%' ) FROM t;

+--------------------------------+

| not ('Monty!' RLIKE 'm%y%%' ) |

+--------------------------------+

|                              1 |

+--------------------------------+

1 row in set

 

示例2:如果expr或pat是NULL,结果也是NULL。

gbase> SELECT NULL RLIKE 'David_', 'David!' RLIKE NULL FROM t;

+----------------------+-----------------------+

| NULL RLIKE 'David_' | 'David!' RLIKE NULL  |

+----------------------+-----------------------+

|                 NULL |                  NULL |

+----------------------+-----------------------+

1 row in set

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论