当前位置: 首页 > news >正文

find_in_set在oracle下的解决方案

比如一张表:

artile (id,type,content);
# type:1表示文艺类,2表示小说类,3表示传记,4表示传说,等等5,6,7,8

表数据:

idtypecontent
13,1dfasdfasdf
21,3,6,8dfasdf
36,8,9add

现在要找出3传记类的artile记录
mysql:

 select * from artile where find_in_set('3',type);

oralce 语句实现:

select * from artile da where instr(','||type||',',',3,')<>0;

原理:
将1,3,6,8转为 ,1,3,6,8,然后找出 ,3,的位置
将3,1转为 ,3,1,然后找出 ,3,的位置
则<>0的即为存在,返回记录)
用自定义一个find_in_set的oracle function 来解决:

CREATE OR REPLACE FUNCTION find_in_set(str IN VARCHAR2, strlist IN VARCHAR2
) RETURN NUMBER
ISpos NUMBER;  
BEGINSELECT INSTR(',' || strlist || ',', ',' || str || ',') INTO pos FROM DUAL;RETURN pos;
END;
/

解释:

这个函数接受两个字符串参数:
str 		-   要查找的字符串
strlist     -   字符串列表,以逗号分隔
函数使用INSTR和双逗号进行匹配查找,返回str在strlist中的位置(从1开始)。
如果未找到,返回0。

使用示例:

SELECT find_in_set('b','a,b,c,d') FROM DUAL; -- 返回 2 
SELECT find_in_set('x','a,b,c,d') FROM DUAL; -- 返回 0

则:

select * from artile where find_in_set('3',type)<>0;

mysql可接受0或其它number做为where 条件,oracle只接受表达式做为where 条件。

You have to grow up, you can live anywhere

http://www.lryc.cn/news/98157.html

相关文章:

  • 智能垃圾桶
  • 面试题-TS(十):如何处理可选属性和默认参数?
  • Istio Pilot源码学习(一):Pilot-Discovery启动流程、ConfigController配置规则发现
  • 数据结构:顺序表(C实现)
  • 素描基础知识
  • 【Chat GPT】用 ChatGPT 运行 Python
  • cartographer发布畸变矫正后的scan数据
  • Idea中git push to origin/master was rejected错误解决方案
  • docker版jxTMS使用指南:自定义频率型动态管控
  • 【Docker】初识Docker以及Docker安装与阿里云镜像配置
  • C语言:动态内存管理
  • 如何往MySQL中插入100万条数据?
  • IntelliJ IDEA 2023.2 最新变化
  • 1300*B. T-primes
  • 重新C++系列之运算符重载
  • kotlin异常处理try-catch-finally
  • Pytorch在cuda、AMD DirectML和AMD CPU下性能比较
  • 哈工大计算机网络课程局域网详解之:交换机概念
  • Jenkins Pipeline的hasProperty函数
  • 芯片制造详解.净洁室的秘密.学习笔记(三)
  • 可解释的 AI:在transformer中可视化注意力
  • k8s Webhook 使用java springboot实现webhook 学习总结
  • JS逆向之猿人学爬虫第20题-wasm
  • 【双指针优化DP】The 2022 Hangzhou Normal U Summer Trials H
  • [论文笔记] LLM数据集——金融数据集
  • 在亚马逊平台,如何有效举报违规行为?
  • 深度学习入门教学——神经网络
  • 阿里Java开发手册~OOP 规约
  • 【Mysql数据库面试01】内连接 左连接 右连接 全连接
  • 事务隔离:为什么你改了我还看不见