1

在 Oracle 中,LIKE 运算符可以与通配符一起使用,也可以不与通配符一起使用。例如,“where name like 'SMITH'”将返回 name 列正好是 'SMITH' 的行,而“where name like 'SMITH%'”将返回 name 列以 'SMITH' 开头后跟 0 或更多的行其他字符。

然而,在 Teradata 中,“像 'SMITH' 这样的名称”什么也不返回。如果不使用通配符,ANSI 标准是否不指定 LIKE 运算符的行为?

布尔代数说 'SMITH' 就像 'SMITH' 是真的。Oracle 就是这样做的;Teradata 没有。是否可以调整 Teradata SQL 以使 LIKE 运算符既可以使用通配符也可以不使用通配符?

4

1 回答 1

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

于 2013-08-03T09:31:36.330 回答