2

我正在编写一个脚本,该脚本应该获取包含指定列的表名列表,并排除包含下划线的表名。我试过了:

SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE 
    COLUMN_NAME = 'SERIAL_NUMBER' AND
    TABLE_NAME NOT LIKE '%\_%';

此查询仍会提取包含下划线的表名。我错过了什么?

4

1 回答 1

10

下划线是 LIKE 语句中的通配符——它只匹配一个字符。试试这个:

SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME = 'SERIAL_NUMBER' 
AND instr(TABLE_NAME, '_') = 0;

发布后,我注意到您实际上试图逃避下划线。LIKE 没有默认的转义字符,所以你需要告诉数据库你在做什么:

  SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME = 'SERIAL_NUMBER' 
AND TABLE_NAME  NOT LIKE '%\_%' ESCAPE '\';

找到更多。

于 2013-04-11T15:56:56.440 回答