|
要求用pl/sql写一个函数, 实现根据分割符把原字符串分成若干个字符串功能.
输入: string(字符串) 和 Delimiter (分隔符)
输出: substr1, ..., substrn (根据分割后的字符串排序, 不是子串在原字符串中的顺序)
[2006-4-4]
本贴中大家所写的函数的使用示例, 参见 "求最有效的实现方法" 第二页
http://www.itpub.net/showthread. ... 10&pagenumber=2
[2006-4-4]
示例:
[php]
1. 分割符为空, 返回字符串本身
SELECT * FROM ConvertStringToTable('a,b,c','');
strValue
----------------------------------------------------------------------------------------------------------------
a,b,c
(1 row(s) affected)
2. 根据分割符 "," 把字符串 'a,b,c' 分成 a b c 三个子字符串(不含分隔符)
SELECT * FROM ConvertStringToTable('a,b,c',',');
strValue
----------------------------------------------------------------------------------------------------------------
a
b
c
(3 row(s) affected)
3. 同2, 字符串中包含的子串内容相同, 显示结果按照子串进行排列, 而不是子串在原字符串中的位置排序
SELECT * FROM ConvertStringToTable('c,b,a',',');
strValue
----------------------------------------------------------------------------------------------------------------
a
b
c
(3 row(s) affected)
4. 包含的子串中如果有相同的子串, 需要报异常错误, 下面是MS SQL SERVER 中的错误示例, PL/SQL 中可以根据情况自定义错误信息
SELECT * FROM ConvertStringToTable('c,b,c',',');
Server: Msg 2627, Level 14, State 1, Procedure ConvertStringToTable, Line 26
Violation of PRIMARY KEY constraint 'PK__@tblList__6EF57B66'. Cannot insert duplicate key in object '#6E01572D'.
The statement has been terminated.
5. 如果分割符为多个字符组成, 仅以第一个字符作为有效分割符, 其他忽略
SELECT * FROM ConvertStringToTable('c,b,a',',d');
strValue
----------------------------------------------------------------------------------------------------------------
a
b
c
(3 row(s) affected)
6. 如果字符串结尾出现分割符, 那么分割符后的认为是空子字符串, 也要作为结果返回, 返回的排序要按照 nulls first 的方式处理
SELECT * FROM ConvertStringToTable('c,b,a,',',')
strValue
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
a
b
c
(4 row(s) affected)
-------------
[/php]
示例中提到的这6点也是对函数的要求, 有兴趣的朋友可以做做
不过要说明, 这个不是什么考试题或是面试题, 是数据库移植中对SQL SERVER中自定义函数的移植
如果对题目还有什么疑问, 随时可以提出 |
|