Oracle sql查询仅选择具有匹配表达式的列

时间:2011-01-23 16:22:10

标签: sql oracle

伙计们我有一张包含以下数据的表

F$2051032568
F$2051032568
22342342343
3242432432432
5745745
45734554

当我编写oracle sql select查询时,我想只获取不以 F $

开头的数据
22342342343
3242432432432
5745745
45734554
请告诉我,如何做到这一点。

实际上它非常棘手,在sql查询的where条件中没有使用$ ,我只需要获取那些不匹配的数据F$

5 个答案:

答案 0 :(得分:5)

尝试:

select col1 from tabl1 where col1 not like '%F$%';

我不确定,如果我理解你的编辑:

select col1 from tabl1 where col1 not like ('%F' || chr(36) || '%');

答案 1 :(得分:1)

如果您使用的是Perl等脚本语言,$%扩展为某些内容(可能是''),则需要转义$。

例如,再次在Perl中,以下内容不起作用:

$select_statment = "select ... from ...where the Column not like '%F$%'";

但这会:

$select_statment = "select ... from ...where the Column not like '%F\$%'";

答案 2 :(得分:0)

select col1 
from tabl1  
where instr(col1,'F$')=0

如果它只是除了F $之外的数字,那么你可以这样做:

select col1 
from tabl1  
where instr(col1,'F')=0

答案 3 :(得分:0)

假设你只需要数字部分...... 您可以创建一个使用TO_NUMBER函数评估行值的函数。 如果它的无效文本,则oracle将抛出ORA-01722: invalid number异常 在函数中处理它,然后您可以在选择查询中使用该函数。

答案 4 :(得分:0)

使用regexp_like可以直接在查询位置包含正则表达式。

假设您只想使用由数字组成的记录

select col1 from tab1
  where regexp_like(col1, '^[[:digit:]]*$');

如果你想匹配不是数字的F +,你可以使用

select col1 from tab1
  where not regexp_like(col1, 'F[^[:digit:]]');