我需要此查询的解决方案,但不能使用LIKE语句。我想我可以使用INSTR和SUBSTR,但是我对它们不太熟悉。
通常,我只能执行类似'%7'的操作,但是我不能在这里进行操作。这样做的目的是取回数据库中在Column1中以7结尾的字符串的任何行的列表。还要注意的是,并非所有字符串的长度都相同,并且我使用的是Oracle SQL Developer 。我已经复制了如下的LIKE语句。
SELECT Column1, Column2
FROM Table1
WHERE Column1 LIKE '%7'
ORDER BY Column2;
答案 0 :(得分:2)
也许是这样吗?
SELECT x FROM t WHERE SUBSTR(x, -1) = '7'
答案 1 :(得分:1)
嗯,一个简单的解决方案是:
where regexp_like(x, '7$')
但是尚不清楚您是否可以使用该功能。
答案 2 :(得分:1)
只是为了补充我发现在大多数情况下更简单,足够好的其他解决方案。
使用以%
开头的模式时,查询有时会非常缓慢。如果是出于性能问题,我将推荐一种性能更好的[overkill]解决方案,因为它使用索引范围扫描而不是全表扫描:
创建一个存储过程以反转字符串:
CREATE OR REPLACE PROCEDURE ReverseOf(input IN varchar2) IS
rev varchar2(50):='';
BEGIN
FOR i in reverse 1..length(input) LOOP
rev := rev||substr(input, i, 1);
END LOOP;
dbms_output.put_line(rev);
END;
在表中创建一个虚拟列:
alter table table1 add column reversed_column1
generated always as (ReverseOf(column1)) virtual;
在虚拟列上创建索引:
create index ix_reverse_column1 on table1 (reversed_column1);
使用“反向赞”(非常快):
SELECT Column1, Column2
FROM Table1
WHERE reversed_column1 LIKE '7%' -- reverse pattern here!
ORDER BY Column2;
也许过度杀伤力,但您可能需要它。去年对我有很大帮助。