在Oracle中,LIKE运算符可以使用或不使用通配符。 例如,“像'SMITH'这样的名称'将返回名称列正好是'SMITH'的行, 和“其中名称如'SMITH%'”将返回名称列以'SMITH'开头,后跟0或更多其他字符的行。
然而在Teradata中,“像'SMITH'这样的名字”没有任何回报。如果在没有通配符的情况下使用,ANSI标准是否不指定LIKE运算符的行为?
布尔代数说'SMITH'就像'SMITH'一样。 Oracle就是这样做的; Teradata没有。可以调整Teradata SQL以使LIKE运算符能够使用和不使用通配符吗?
答案 0 :(得分: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
这绝对是100%标准SQL兼容。
您可能要做的是将CHAR列或VARCHAR列与其中的一些尾随空白进行比较。在比较之前,Oracle默默地用空格填充较短的字符串(根据标准SQL这是错误的),类似于使用等式(=)的比较。