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




