Oracle 11g Release 1 (11.1)函数――(返回字符值的)字符函数(二)
ERE department_id = 60
9 ORDER BY employee_id;
EMPLOYEE_ID hiredate Trim 0 TrimLeadin TrimTraili TrimBoth 0
----------- ---------- ---------- ---------- ---------- ----------
103 03-1月 -90 3-1月 -9 3-1月 -90 03-1月 -9 3-1月 -9
104 21-5月 -91 21-5月 -91 21-5月 -91 21-5月 -91 21-5月 -91
105 25-6月 -97 25-6月 -97 25-6月 -97 25-6月 -97 25-6月 -97
106 05-2月 -98 5-2月 -98 5-2月 -98 05-2月 -98 5-2月 -98
107 07-2月 -99 7-2月 -99 7-2月 -99 07-2月 -99 7-2月 -99
SQL>
注意:结果日期中 0 的变化。
NLSSORT(char,’nlsparam’)
NLSSORT(char)
指定特定语言敏感的排序。
示例 5:演示 NLSSORT。
先创建需要的表 test。代码如下:
SQL> CREATE TABLE test (name VARCHAR2(15));
表已创建。
SQL> INSERT INTO test VALUES ('Gaardiner');
www.2cto.com
已创建 1 行。
SQL> INSERT INTO test VALUES ('Gaberd');
已创建 1 行。
SQL> INSERT INTO test VALUES ('Gaasten');
已创建 1 行。
SQL>
SQL> SELECT * FROM test ORDER BY name;
NAME
---------------
Gaardiner
Gaasten
Gaberd
SQL>
若指定语言敏感排序。代码如下:
SQL> SELECT * FROM test ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');
NAME
---------------
Gaberd
Gaardiner
Gaasten
SQL>
示例 6:演示如何在比较操作中使用 NLSSORT。
SQL> SELECT * FROM test WHERE name > 'Gaberd'
2 ORDER BY name;
为选定行
SQL> SELECT * FROM test WHERE NLSSORT(name, 'NLS_SORT = XDanish') >
2 NLSSORT('Gaberd', 'NLS_SORT = XDanish')
3 ORDER BY name;
NAME
---------------
Gaardiner
Gaasten
www.2cto.com
SQL>
REPLACE(char,search_string)
REPLACE(char,search_string,replacement_string)
REGEXP_REPLACE(source_char,pattern)
REGEXP_REPLACE(source_char,pattern,replace_string)
REGEXP_REPLACE(source_char,pattern,replace_string,position)
REGEXP_REPLACE(source_char,pattern,replace_string,position,occurrence)
REGEXP_REPLACE(source_char,pattern,replace_string,position,occurrence,match_param)
REPLACE 替换。
REGEXP_REPLACE 按正则表达式替换。
示例 7:演示 REPLACE。
SQL> SELECT REPLACE('JACK and JUE', 'J') "remove",
2 REPLACE('JACK and JUE', 'J', 'BL') "replace"
3 FROM DUAL;
remove change
---------- --------------
ACK and UE BLACK and BLUE
SQL>
示例 8:演示 REGEXP_REPLACE。表 employees 和 countries 位于 Oracle OE schema。
演示检索电话号码 phone_number 字段中形如 xxx.xxx.xxxx 的号码,并重新格式化为 (xxx) xxx-xxxx。
SQL> SELECT
2 REGEXP_REPLACE(phone_number,
3 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
4 '(\1) \2-\3') "REGEXP_REPLACE"
5 FROM employees
6 ORDER BY "REGEXP_REPLACE";
REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
演示检查 country_name 字段。为字段每个非空的值,在字符间插入空格。
SQL> SELECT
2 REGEXP_REPLACE(country_name, '(.)', '\1 ') "REGEXP_REPLACE"
3 FROM countries;
REGEXP_REPLACE
--------------------------------------------------------------------------------
A r g e n t i n a
A u s t r a l i a
B e l g i u m
B r a z i l
C a n a d a
www.2cto.com
SQL>
演示检查字符串,查找两个或更多空格。用一个空格替换掉多余的空格。
SQL> SELECT
2 REGEXP_REPLACE('500 Oracle Parkway, Redwood Shores, CA',
3 '( ){2,}', ' ') "REGEXP_REPLACE"
4 FROM DUAL;
REGEXP_REPLACE