Sql 检查字符串是否以另一个字符串开头最方便的方法是什么?
我希望有一种正确的方法来检查一个字符串是否是另一个字符串的开头(并且它们是不同的) 给定Sql 检查字符串是否以另一个字符串开头最方便的方法是什么?,sql,oracle,Sql,Oracle,我希望有一种正确的方法来检查一个字符串是否是另一个字符串的开头(并且它们是不同的) 给定s1和s2我有以下可能性: LENGTH(s1) < LENGTH(s2) AND SUBSTR(s2, 1, LENGTH(s1)) = s1 s2 LIKE replace(replace(replace(s1,'\','\\'),'%','\%'),'_','\_') || '_%' ESCAPE '\' LENGTH(s1)
s1
和s2
我有以下可能性:
LENGTH(s1) < LENGTH(s2) AND SUBSTR(s2, 1, LENGTH(s1)) = s1
s2 LIKE replace(replace(replace(s1,'\','\\'),'%','\%'),'_','\_') || '_%' ESCAPE '\'
LENGTH(s1)
有没有更好的方法使用我不知道的本机函数
注意:s1
和s2
可能包含%
、\uu
或任何其他字符强>
谢谢。我不认为这是一个更好的方法,但为了完整性,还有:
LENGTH(s1) < LENGTH(s2) AND INSTR(s2,s1) = 1
LENGTH(s1)
一个简单的if语句就可以做到这一点:
set serveroutput on
declare
s1 varchar2(1000) := 'hellothere';
s2 varchar2(1000) := 'hello';
begin
if s1 != s2 and s1 like s2||'%' then
dbms_output.put_line('There are alike');
else
dbms_output.put_line('not alike');
end if;
end;
不完全相同-这些条件测试s1是否包含在s2中,而不是s2是否以s1开头。如果为
INSTR()
指定可选位置参数,即INSTR(s2,s1,1)=1
我不同意(或正在丢失我的弹珠):INSTR(s2,s1)返回s1在s2中第一次出现的位置,这将起作用。如果返回1,则表示s2以s1开头。如果没有,请解释原因@很好,我的弹珠完好无损!与@Mark Bannister的注释相同:不处理s1
和s2
具有特殊字符的情况。