在SQL查询中使用LIKE来代替IN查询的方法
在SQL查询中根据已知ID的集合来查询结果我们通常会用到IN,直接在IN后面给出ID的集合或是在IN后面跟一个子查询。
如下:代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D','F2212304-51D4-42C9-AD35-5586A822258E')
可以看出直接在IN后面跟ID的集合需要将每一个ID都用单引号引起来。在实际应用中会遇到这么一种情况,在界面中收集的是一串GUID的拼接字符串,中间以逗号隔开,如果作为参数传到一个存储过程中执行,最终生成的语句会是下面这样:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E')
这样就不能查询到正确的结果。
一般情况下我们解决此问题的思路是将传入的字符串用一个split函数来处理,最终处理的结果是一张表,然后将这个表做自查询即可,如下:
代码如下:
DECLARE @IDs VARCHAR(4000)
SET @IDs='BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
DECLARE @temp TABLE(str VARCHAR(50))
INSERT INTO @temp
SELECT * FROM dbo.Split(@IDs,',')
SELECT * FROM Orders WHERE OrderGUID IN (SELECT str FROM @temp)
当然split函数系统比不提供,需要我们自己写:
代码如下:
CREATE FUNCTION Split
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
DECLARE @i INT
SET @SourceSql=rtrim(ltrim(@SourceSql))
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
INSERT @temp VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
IF @SourceSql''
INSERT @temp VALUES(@SourceSql)
RETURN
END
像这样做非常麻烦,而且还需要借助函数来实现,下面介绍一种简单的方法,因为GUID是唯一的,所以在上面的例子中可以使用LIKE来代替IN也可以达到同样的查询效果:
代码如下:
SELECT * FROM Orders
WHERE 'BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
LIKE '%'+convert(VARCHAR(40),OrderGUID)+'%'

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











국제화가 지속적으로 발전함에 따라 점점 더 많은 웹사이트와 애플리케이션이 다중 언어 전환 기능을 지원해야 합니다. 널리 사용되는 프런트엔드 프레임워크인 Vue는 다중 언어 전환을 달성하는 데 도움이 되는 i18n이라는 플러그인을 제공합니다. 이 기사에서는 i18n을 사용하여 Vue에서 다중 언어 전환을 구현하는 일반적인 기술을 소개합니다. 1단계: i18n 플러그인 설치 먼저 npm 또는 Yarn을 사용하여 i18n 플러그인을 설치해야 합니다. 명령줄에 다음 명령을 입력합니다: npminst

out 인터페이스는 출력 인터페이스를 나타내고 in 인터페이스는 입력 인터페이스를 나타냅니다. 아웃 인터페이스는 일반적으로 스피커, 헤드폰 등과 같은 부하를 연결하는 데 사용되는 오디오 소스 라인 출력 인터페이스를 나타내고, 인 인터페이스는 일반적으로 CD 플레이어, 모바일을 연결하는 데 사용되는 오디오 소스 라인 입력 인터페이스를 나타냅니다. 휴대폰, MP3 플레이어, 컴퓨터 등

1. 일치하는 내용의 차이 LIKE는 전체 데이터가 일치해야 하며 REGEXP는 부분 일치만 필요하며 하나의 조각만 충족하면 됩니다. 2. 일치 위치의 차이점: LIKE는 전체 열과 일치합니다. 일치하는 텍스트가 열 값에 나타나면 LIKE는 이를 찾지 않으며 해당 행은 반환되지 않습니다(REGEXP가 열 값 내에 사용되지 않는 한). 일치하는 텍스트가 열 값에 나타나면 REGEXP는 이를 찾아 해당 행을 반환하고 REGEXP는 전체 열 값을 일치시킬 수 있습니다(LIKE와 동일한 효과). 3. SQL 문은 LIKE 일치와 다른 데이터를 반환합니다: SQL 문

MySQL의 느린 쿼리 로그는 MySQL에서 제공하는 로그 기록으로, 쿼리 시간이 설정된 임계값(long_query_time)을 초과(이상)한 명령문을 MySQL에서 기록하여 느린 쿼리 로그에 기록하는 데 사용됩니다.

LIKE 연산자는 WHERE 절의 열에서 지정된 패턴을 검색하는 데 사용됩니다. 구문: SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpatternpattern 지정된 템플릿이 배치되는 위치이며 여기서는 와일드카드 문자 %라고도 하는 "%"가 사용됩니다. 조건 앞에 배치되면 ..로 끝나는 데이터를 검색합니다. .; 예: % Li %가 조건 뒤에 오면...으로 시작하는 데이터가 검색됩니다. 예: Li %%가 조건 앞뒤에 있으면 포함된 데이터가 검색됩니다. 리% 지식 포인트 : ERROR1064 (42000):Youhaveane

PHP 및 PDO: 복잡한 SQL 쿼리 문을 실행하는 방법 데이터베이스 작업을 처리할 때 PHP는 데이터베이스와의 상호 작용을 단순화하기 위해 강력한 확장 라이브러리 PDO(PHPDataObjects)를 제공합니다. PDO는 MySQL, SQLite 등 다양한 데이터베이스를 지원하며 개발자가 다양한 데이터베이스 작업을 수행할 수 있도록 다양한 기능과 방법을 제공합니다. 이 기사에서는 PDO를 사용하여 복잡한 SQL 쿼리 문을 실행하고 해당 코드 예제를 첨부하는 방법을 소개합니다. 데이터베이스에 연결

Union을 사용하여 Like 문 최적화 1) 쿼리에서 비교를 위해 or 연산자를 사용해야 하는 경우가 있습니다. where 절에서 or 키워드가 너무 자주 사용되면 MySQL 최적화 프로그램이 실수로 레코드를 검색하기 위해 전체 테이블 스캔을 선택하게 될 수 있습니다. Union 절을 사용하면 특히 쿼리 중 하나에 최적화된 인덱스가 있고 다른 쿼리에도 최적화된 인덱스가 있는 경우 쿼리 실행 속도가 빨라집니다. 예를 들어 각각 first_name과 last_name에 인덱스가 있는 경우 다음 쿼리 문을 실행합니다. mysql>select*fromstudentswherefirst_namelike'A

Mysqlon, in, as의 차이점 where 답변: Where 쿼리 조건은 내부 및 외부 연결에 대해 별칭으로 on을 사용하여 특정 값이 특정 조건에서 2개의 테이블을 생성하는지 쿼리합니다. 학생, 점수학생: 점수: whereSELECT*FROMstudentWHEREs_sex=' Male'예: onSELECT*FROMstudentLEFTJOINscoreonstudent.s_id=score.s_id; on과 where의 조합: SELECT*FROMstudentLEFTJOINs
