oracle中的FIND_IN_SET使用
时间: 2023-11-14 20:12:04 浏览: 132
在Oracle中,没有内置的FIND_IN_SET函数,但是可以通过自定义函数来实现类似的功能。下面是一个示例函数:
```
CREATE OR REPLACE FUNCTION find_in_set(p_string IN VARCHAR2, p_list IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
RETURN CASE WHEN ','||p_list||',' LIKE '%,'||p_string||',%' THEN 1 ELSE 0 END;
END;
```
这个函数接受两个参数,第一个参数是要查找的字符串,第二个参数是逗号分隔的字符串列表。如果要查找的字符串在列表中,则返回1,否则返回0。
使用这个函数的示例查询语句如下:
```
SELECT * FROM my_table WHERE find_in_set('foo', my_column) = 1;
```
这个查询语句会返回my_column列中包含字符串'foo'的所有行。
相关问题
oracle 替代 find_in_set
在 Oracle 中,可以使用 REGEXP_LIKE 函数来替代 MySQL 中的 find_in_set 函数。REGEXP_LIKE 函数用于在字符串中查找匹配的模式。
例如,假设有一个表格名为 data,包含一个名为 values 的列,存储了逗号分隔的值。我们想要查找包含特定值的行。可以使用以下查询来实现类似于 find_in_set 的功能:
```sql
SELECT *
FROM data
WHERE REGEXP_LIKE(values, '(^|,)(value)(,|$)')
```
在上述查询中,将 "value" 替换为要查找的特定值。这个正则表达式模式将匹配以逗号开头或结尾,或者被逗号包围的值。
希望以上信息能对你有所帮助!如有其他问题,请随时提问。
oracle没有FIND_IN_SET,那使用什么
Oracle数据库中确实没有内置的 FIND_IN_SET 函数,但你可以使用其他方法来实现类似的功能。一种常见的解决方案是使用正则表达式或者使用模糊查询来模拟 FIND_IN_SET 的功能。
下面是使用正则表达式来实现 FIND_IN_SET 的示例代码:
```sql
SELECT column_name
FROM table_name
WHERE REGEXP_LIKE(column_name, '^value1(,|$)|^value2(,|$)|^value3(,|$)');
```
这个示例中,`column_name` 是你要搜索的列名,`table_name` 是你要搜索的表名。`value1`,`value2` 和 `value3` 是你要查找的值。正则表达式 `^value(,|$)` 用于匹配以 `value` 开头并且接着是逗号或者字符串结束符的内容。
另外一种方法是使用模糊查询来实现类似的功能:
```sql
SELECT column_name
FROM table_name
WHERE ',' || column_name || ',' LIKE '%,value1,%'
OR ',' || column_name || ',' LIKE '%,value2,%'
OR ',' || column_name || ',' LIKE '%,value3,%';
```
这个示例中,`column_name` 是你要搜索的列名,`table_name` 是你要搜索的表名。`value1`,`value2` 和 `value3` 是你要查找的值。我们在每个字段值的前后添加了逗号,并使用 LIKE 操作符进行模糊匹配。
希望这些方法能够满足你的需求!
阅读全文