没有通配符的Teradata LIKE运算符?

时间:2013-08-03 03:38:58

标签: sql oracle teradata

在Oracle中,LIKE运算符可以使用或不使用通配符。 例如,“像'SMITH'这样的名称'将返回名称列正好是'SMITH'的行, 和“其中名称如'SMITH%'”将返回名称列以'SMITH'开头,后跟0或更多其他字符的行。

然而在Teradata中,“像'SMITH'这样的名字”没有任何回报。如果在没有通配符的情况下使用,ANSI标准是否不指定LIKE运算符的行为?

布尔代数说'SMITH'就像'SMITH'一样。 Oracle就是这样做的; Teradata没有。可以调整Teradata SQL以使LIKE运算符能够使用和不使用通配符吗?

1 个答案:

答案 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这是错误的),类似于使用等式(=)的比较。