2011-11-30 65 views
1

我想從以下結構的表中選擇:動態「喜歡」在SQL(Oracle)的聲明

MATERIALS 
id 
shortname 
longname 

所有的線路,其中長的名字是一樣的簡稱。

我試過這裏提出的解決方案:Dynamic Like Statement in SQL ,但它不適用於我。

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

在Oracle中不起作用。

+2

我找到了答案在此期間:SELECT * FROM材料,其中LONGNAME就像CONCAT(上(短名稱), '%'); –

回答

8

可以使用CONCAT()功能:

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

甚至更​​好,標準|| (double pipe)操作:

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

Oracle的CONCAT()功能不超過2爭論,所以人們會使用暨同時與運營商它是簡單的:a || b || c

2

CONCAT()可能是技術上最正確的。

爲了方便,但是,Oracle 確實有相當的運營商+ ...

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

如果我沒有錯,'||'在技術上是正確的,'+'是非標準的。 –

+0

但我可能是錯的。不確定。 –

+0

@ypercube:你是[正確](http://troels.arvin.dk/db/rdbms/#functions-concat)。 – Allan