oracle 神一样的逻辑,总会受到限制 length replace 例子
之前遇到个题目,在 emp 表里 列出名字中包含 A 并且名字是4个字的,按我的逻辑思路,很快能得出答案:
SELECT *
FROM emp
WHERE ename LIKE '%A%' AND ename LIKE '____';
但爱折腾的我总想看看有什么其他方法实现,然后他来了:
SELECT * FROM EMP WHERE LENGTH( ENAME LIKE '%A%') = 4;
感觉这个很屌,但是执行就报错了:
然后这个坑得怎么填呢,可以分开用and的模式获取正确的答案,不能用了length后在他括号里用like函数,length函数里面不能这种逻辑,一般来说函数是传值的 ,只有逻辑里才嵌套逻辑,确实这样看有点绕,我们再举个例
SELECT replace (replace ('aaaa','a','b'),'b','c') FROM dual;
很开心,执行成功了
为什么这样嵌套又可以生效呢?其实是因为我这次传的是值,而length上面我们传入的是 “ENAME LIKE '%A%'”是个条件,所以失败了,这就可以让你更深入的了解函数的运用了,希望有其他见解评论,共同成长。