我正在编写一个脚本,该脚本应该获取包含指定列的表名列表,并排除包含下划线的表名。我试过了:
SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE
COLUMN_NAME = 'SERIAL_NUMBER' AND
TABLE_NAME NOT LIKE '%\_%';
此查询仍会提取包含下划线的表名。我错过了什么?
下划线是 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 '\';