SQL中的动态'LIKE'语句(Oracle)

时间:2011-11-30 14:39:53

标签: sql oracle

我正在尝试从具有以下结构的表中进行选择:

MATERIALS 
id
shortname 
longname

长名称就像短名称的所有行。

我已尝试过此处提供的解决方案:Dynamic Like Statement in SQL ,但它对我不起作用。

SELECT * from MATERIALS where longname like (shortname + '%');

在Oracle中不起作用。

2 个答案:

答案 0 :(得分:10)

您可以使用 CONCAT() 功能:

SELECT * 
FROM MATERIALS 
WHERE longname LIKE CONCAT(shortname, '%')

甚至更好,标准 || (double pipe) 运算符:

SELECT * 
FROM MATERIALS 
WHERE longname LIKE (shortname || '%')

Oracle的CONCAT()函数不会超过2个参数,因此可以使用繁琐的CONCAT(CONCAT(a, b), c),而使用运算符则很简单:a || b || c

答案 1 :(得分:2)

CONCAT()可能是技术上最正确的。

但是,为方便起见,ORACLE 具有与+等效的运算符...

SELECT * 
FROM MATERIALS 
WHERE longname LIKE (shortname || '%')