2013-04-11 53 views
1

我正在处理一个脚本,该脚本应该抓取包含指定列的表名列表,并排除包含下划线的表名。我曾尝试过:获取Oracle中不包含“_”的表名

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

回答

9

Underscore是LIKE语句中的通配符 - 它恰好匹配一个字符。试试这个:

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

发布我注意到,你居然还企图逃跑下划线后。没有像没有缺省转义字符,所以你需要告诉你在做什么数据库:

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

Find out more.

+0

那完美。谢谢!感谢您解释转义字符。 – amlane86 2013-04-11 16:03:00

+0

不知道你是否看过我的附录? – APC 2013-04-11 16:06:11

+0

我做过了,在你编辑你的答案之前,我就已经问过了。感谢您提供一个很好的答案。 – amlane86 2013-04-11 16:08:20