2013-08-03 61 views
1

在Oracle中,LIKE運算符可以使用或不使用通配符。 例如,「名稱如'SMITH'」將返回名稱列完全是'SMITH', 和'其中名稱如'SMITH%''「的行將返回名稱列以'SMITH'開頭,然後是0或更多其他角色。沒有通配符的Teradata LIKE運算符?

但是,在Teradata,「像'SMITH'這樣的名字」什麼都沒有返回。如果沒有通配符使用,ANSI標準是否不爲LIKE操作符指定行爲?

布爾代數說'SMITH'就像'SMITH'是對的。 Oracle的行爲就是這樣; Teradata沒有。可以調整Teradata SQL以使LIKE運算符可以使用通配符還是不使用通配符?

+0

「能否調整Teradata SQL以使LIKE運算符可以使用通配符和不使用通配符?」 - 是的:如果不存在,添加通配符。 –

+2

布爾代數什麼時候說的?我一定錯過了那次談話。它在TED嗎? – Hogan

回答

3

這就是我得到的每一個Teradata的釋放:

BTEQ -- Enter your SQL request or BTEQ command: 
SELECT 
    CASE WHEN 'smith' LIKE 'smith' THEN 'equal' ELSE 'not equal' END, 
    CASE WHEN 'smith' LIKE 'smith ' THEN 'equal' ELSE 'not equal' END, 
    CASE WHEN 'smith' = 'smith ' THEN 'equal' ELSE 'not equal' END; 


*** QUERY completed. One ROW FOUND. 3 COLUMNS returned. 
*** Total elapsed TIME was 1 SECOND. 

<CASE expression> <CASE expression> <CASE expression> 
------------------ ------------------ ------------------ 
equal    not equal   equal 

而且這絕對是標準的SQL兼容的100%。

你可能做了什麼是比較一個CHAR列或一個VARCHAR列與其中的一些尾隨空白。 Oracle在比較之前(根據標準SQL,這是錯誤的)類似於使用相等(=)的比較,在空白處填充較短的空白字符串。