[SQL] SQL Server는 빈 공간을 무시하고 같이 사용하여 검색
SQLSQL Server는 빈 공간을 무시하고 같이 사용하여 검색
나는 데이터베이스에 전화 열을 가지고 있고, 기록은 오른쪽에 원치 않는 공백을 포함. 나는 트림을 사용하고 교체했는데, 그것은 올바른 결과를 반환하지 않았습니다.
내가 사용하는 경우
phone like '%2581254%'
그것은 반환
customerid
-----------
33470
33472
33473
33474
하지만 난 단지, 난 단지 왼쪽을 일치시킬 처음에 퍼센트 기호 또는 와일드 카드를 사용할 필요가있다.
나는 이런 식으로 사용한다면
phone like '%2581254'
나는 때문에 오른쪽에 공백, 아무 것도 얻을 수 없습니다!
나는 트림을 사용하고 교체하고 노력 그래서 나는 하나 개의 결과 만 얻을
LTRIM(RTRIM(phone)) LIKE '%2581254'
보고
customerid
-----------
33474
이 네 가지 ID를 동일한 전화 번호가 있습니다!
테이블 데이터
customerid phone
-------------------------------------
33470 96506217601532388254
33472 96506217601532388254
33473 96506217601532388254
33474 96506217601532388254
33475 966508307940
나는 제안 시험을 위해 많은 수를 추가
PHP 함수는 지난 7 개 자리를 소요하고 비교합니다.
예를 들면
01532388254 will be 2581254
나는 전화 번호이 7 개 자리를 가지고 모든 사용자에 대해 검색 할 2581254
문제가 어디 내가 알아낼 수 없습니다!
그것은 4 식별자 대신 한 ID를 반환해야합니다
해결법
-
==============================
1.샘플 데이터를 감안할 때, 나는 당신이 당신의 데이터에 제어 문자를 생각한다. 예를 들면 문자 (13), 문자 (10)
샘플 데이터를 감안할 때, 나는 당신이 당신의 데이터에 제어 문자를 생각한다. 예를 들면 문자 (13), 문자 (10)
이를 확인하려면 바로 다음을 실행
Select customerid,phone From YourTable Where CharIndex(CHAR(0),[phone])+CharIndex(CHAR(1),[phone])+CharIndex(CHAR(2),[phone])+CharIndex(CHAR(3),[phone]) +CharIndex(CHAR(4),[phone])+CharIndex(CHAR(5),[phone])+CharIndex(CHAR(6),[phone])+CharIndex(CHAR(7),[phone]) +CharIndex(CHAR(8),[phone])+CharIndex(CHAR(9),[phone])+CharIndex(CHAR(10),[phone])+CharIndex(CHAR(11),[phone]) +CharIndex(CHAR(12),[phone])+CharIndex(CHAR(13),[phone])+CharIndex(CHAR(14),[phone])+CharIndex(CHAR(15),[phone]) +CharIndex(CHAR(16),[phone])+CharIndex(CHAR(17),[phone])+CharIndex(CHAR(18),[phone])+CharIndex(CHAR(19),[phone]) +CharIndex(CHAR(20),[phone])+CharIndex(CHAR(21),[phone])+CharIndex(CHAR(22),[phone])+CharIndex(CHAR(23),[phone]) +CharIndex(CHAR(24),[phone])+CharIndex(CHAR(25),[phone])+CharIndex(CHAR(26),[phone])+CharIndex(CHAR(27),[phone]) +CharIndex(CHAR(28),[phone])+CharIndex(CHAR(29),[phone])+CharIndex(CHAR(30),[phone])+CharIndex(CHAR(31),[phone]) +CharIndex(CHAR(127),[phone]) >0
테스트 결과가 긍정적 인 경우
다음 UDF는 업데이 트를 통해 데이터로부터 제어 문자를 제거 할 수 있습니다
Update YourTable Set Phone=[dbo].[udf-Str-Strip-Control](Phone)
관심이 경우, UDF
CREATE FUNCTION [dbo].[udf-Str-Strip-Control](@S varchar(max)) Returns varchar(max) Begin ;with cte1(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)), cte2(C) As (Select Top (32) Char(Row_Number() over (Order By (Select NULL))-1) From cte1 a,cte1 b) Select @S = Replace(@S,C,' ') From cte2 Return LTrim(RTrim(Replace(Replace(Replace(@S,' ','><'),'<>',''),'><',' '))) End --Select [dbo].[udf-Str-Strip-Control]('Michael '+char(13)+char(10)+'LastName') --Returns: Michael LastName
약속 (빌에 의해 슬쩍 찔렀다)으로, 다음은 UDF에 약간의 논평이다.
from https://stackoverflow.com/questions/42958278/sql-server-search-using-like-while-ignoring-blank-spaces by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL Server를 단일 테이블에 가입하여 요약을 만들 수 있습니까? (0) | 2020.06.19 |
---|---|
[SQL] PostgreSQL를 9.3 : 동적 피벗 테이블 (0) | 2020.06.19 |
[SQL] 어떻게 서로 다른 값을 가진 테이블을 조인을 사용 값을 얻으려면? (0) | 2020.06.19 |
[SQL] 타임 스탬프로 유닉스 시대를 변환하는 방법 (0) | 2020.06.19 |
[SQL] MSSQL - GROUP_CONCAT (0) | 2020.06.19 |