Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查字符串是否以另一个字符串开头最方便的方法是什么?_Sql_Oracle - Fatal编程技术网

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
具有特殊字符的情况。