在Oracle中实现类似于MySQL中的find_in_set
函数的功能,可以通过以下步骤来实现:
- 创建一个用于分割字符串的函数:
CREATE OR REPLACE FUNCTION SPLIT_STRING(p_string IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN SYS.ODCIVARCHAR2LIST IS v_string VARCHAR2(4000) := p_string; v_delimiter VARCHAR2(100) := p_delimiter; v_length PLS_INTEGER := LENGTH(v_string); v_index PLS_INTEGER; v_tab SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST(); BEGIN IF v_delimiter IS NULL THEN v_tab.EXTEND; v_tab(v_tab.LAST) := v_string; RETURN v_tab; END IF; v_index := INSTR(v_string, v_delimiter); WHILE v_index > 0 LOOP v_tab.EXTEND; v_tab(v_tab.LAST) := SUBSTR(v_string, 1, v_index - 1); v_string := SUBSTR(v_string, v_index + LENGTH(v_delimiter), v_length); v_length := LENGTH(v_string); v_index := INSTR(v_string, v_delimiter); END LOOP; v_tab.EXTEND; v_tab(v_tab.LAST) := v_string; RETURN v_tab; END; /
- 使用创建的函数来查询包含指定值的字符串:
SELECT * FROM your_table WHERE EXISTS ( SELECT 1 FROM TABLE(SPLIT_STRING(your_column, ',')) t WHERE t.COLUMN_VALUE = 'https://www.yisu.com/ask/your_value' );
在上面的代码中,SPLIT_STRING
函数用于将字符串按照指定的分隔符拆分成多个值,并返回一个包含这些值的表。然后在查询中使用EXISTS
子查询来判断指定的值是否在拆分后的值中存在。