我有一个字循环逐字串的问题。我会输入字符串“苏丹中国美国非洲”,我有查询表有3行苏丹,中国,美国。因此,我需要写入PL/SQL函数,该函数将循环输入字符串“苏丹中国美国非洲”,从右到左(在这种情况下,非洲到苏丹)每个单词,并尝试从查找表中找到匹配,并找到任何匹配词(右边的第一个词,在本例中是USA),它将停止循环并返回单词(USA)。因此总结一下,我们必须逐字从一个输入字符串的右到左循环,并返回查找表中可用的第一个匹配字。在PL/SQL中循环遍历字
-1
A
回答
1
这可以通过单个SQL查询来完成,例如,
WITH mydata AS
(SELECT 1 AS id, 'Sudan China USA Africa' AS string FROM dual
UNION ALL
SELECT 2 , 'China Europe Sudan Asia' FROM dual
)
, lookup AS
(SELECT 'Sudan' AS word FROM dual
UNION ALL
SELECT 'China' FROM dual
UNION ALL
SELECT 'USA' FROM dual
)
SELECT t.id
, max(t.word) KEEP (DENSE_RANK LAST ORDER BY t.pos) lastword
FROM (SELECT mydata.id
, pos.column_value AS pos
, regexp_substr(mydata.string, '([^ ])+', 1, pos.column_value) AS word
FROM mydata
CROSS JOIN
TABLE
(CAST
(MULTISET
(SELECT level
FROM dual
CONNECT BY level <= regexp_count(mydata.string, '([^ ])+')
) AS sys.odciNumberList
)
) pos) t
INNER JOIN lookup l
ON (t.word = l.word)
GROUP BY t.id
ID LASTWORD
---------- -----------------------
1 USA
2 Sudan
1
declare
function searchWord(inputString in varchar2) return varchar2
is
TYPE arrayWord IS TABLE OF VARCHAR2(32767) INDEX BY PLS_INTEGER;
word arrayWord;
tmpStr varchar2(32767);
i pls_integer := 0;
tmp number;
begin
tmpStr := inputString;
loop
word(i) := (substr(tmpStr,1, instr(tmpStr,' ')-1));
tmpStr := substr(tmpStr, instr(tmpStr,' ')+1);
if instr(tmpStr,' ') = 0 then
i := i+1;
word(i):= tmpStr;
exit;
end if;
i := i+1;
end loop;
if word.count > 0 then
for i in reverse word.first..word.last
loop
select count(*) into tmp from t1 t where t.word = word(i) and rownum = 1;
if tmp != 0 then
return word(i);
end if;
end loop;
end if;
return null;
end searchWord;
begin
dbms_output.put_line(searchWord('Sudan China USA Africa'));
end;
相关问题
- 1. 在jQuery中循环遍历
- 2. 在ruby中循环遍历
- 3. 在jQuery中循环遍历?
- 4. 在PowerBuilder中循环遍历字符串
- 5. 在Python中循环遍历数字
- 6. 循环遍历isEmpty
- 7. 循环遍历天
- 8. 循环遍历LinkedList
- 9. 循环遍历pd.dataframe
- 10. PLSQL中循环
- 11. 循环遍历循环并返回数组中的字符串
- 12. 循环遍历for循环和If/Else
- 13. 未循环遍历循环 - javascript
- 14. VBA循环遍历嵌套for循环
- 15. 在绑定中循环遍历颜色
- 16. 在JavaScript中循环遍历'Hashmap'
- 17. 在图像中循环遍历像素
- 18. 在boost :: unordered_multimap中循环遍历equal_range
- 19. 在C++中循环遍历的变量
- 20. 在整数中循环遍历,ruby
- 21. 在PHP中循环遍历MySQL行
- 22. 在bash中循环遍历数组
- 23. “for”在shell中循环遍历目录
- 24. 在DataView中循环遍历行
- 25. 在Ruby/Rails中循环遍历数组
- 26. 在PHP中循环遍历一个JSON
- 27. 在Laravel中循环遍历对象
- 28. 在XSLT中循环遍历日期
- 29. 在Swift中循环遍历NSMutableArray
- 30. R在调查包中循环遍历
背后从右到左搜索单词的原因是什么?你是否试图解决你的问题?你能用当前的进度发布你的代码吗? – yamny 2014-09-05 07:44:05
目前我在使用instr函数查找字符串中第一次出现任何关键字。因为它在远程机器上,我无法共享我现有的代码。 – Sid 2014-09-05 07:51:03