복붙노트

[SQL] SQL 서버 내에서 와일드 카드를 사용하여

SQL

SQL 서버 내에서 와일드 카드를 사용하여

나는 이것이 내가이 질문에 아마 요청 받았다 알고있는 기본적인 질문을해야한다 생각하지만, 이후 나는 그것을 찾을 수 없습니다입니다. 아마 내 또래 집단의 압력 배지를 획득 할에 대해,하지만 난 어쨌든 요청할 것입니다 :

내가 IN을 사용할 때 와일드 카드 문자 % 사용에 대한 인식하지 오전 SQL Server의 방법이있다.

나는 내가 사용 또는처럼 수 있다는 걸 :

select *
from jobdetails
where job_no like '0711%' or job_no like '0712%'

어떤 경우에는 내가 서브 쿼리를 같이 사용할 수 있습니다 :

select *
from jobdetails
where job_no in (select job_no from jobs where job_id = 39)

그러나 나는 다음과 같은 일을 찾고 있어요 :

select *
from jobdetails
where job_no in ('0711%', '0712%')

이 경우에는 문자 대신 행이 반환되도록 와일드 카드 문자로 백분율 기호를 사용합니다. 나는이 작업을 수행해야 할 때 나는 현재 단지 OR의 한 무리를 사용하지만, 나는 더 나은 방법이 있어야한다 알고있다. 당신이 어떤 방법을 사용합니까?

해결법

  1. ==============================

    1.방법에 대해 :

    방법에 대해 :

    WHERE LEFT(job_no, 4) IN ('0711', '0712', ...)
    
  2. ==============================

    2.어떻게 이런 일에 대해?

    어떻게 이런 일에 대해?

    declare @search table
    (
        searchString varchar(10)
    )
    
    -- add whatever criteria you want...
    insert into @search select '0711%' union select '0712%'
    
    select j.*
    from jobdetails j
        join @search s on j.job_no like s.searchString
    
  3. ==============================

    3.나는이 메시지의 발신자는 간단한 형태로 원하는 것을에 대한 해결책을 가지고 생각합니다. 그것은 나를 위해 작동하고 실제로는 시작하기 내가 여기에 온 이유입니다. 난 그냥 그것을 할 것입니다 관찰 보고서와 함께 '% 텍스트 %'와 같은 열 괄호를 사용하여 생각합니다.

    나는이 메시지의 발신자는 간단한 형태로 원하는 것을에 대한 해결책을 가지고 생각합니다. 그것은 나를 위해 작동하고 실제로는 시작하기 내가 여기에 온 이유입니다. 난 그냥 그것을 할 것입니다 관찰 보고서와 함께 '% 텍스트 %'와 같은 열 괄호를 사용하여 생각합니다.

    select * from tableName
    where (sameColumnName like '%findThis%' or sameColumnName like '%andThis%' or 
    sameColumnName like '%thisToo%' or sameColumnName like '%andOneMore%') 
    
  4. ==============================

    4.당신이 뭔가를 시도 할 수 있습니다 :

    당신이 뭔가를 시도 할 수 있습니다 :

    select *
    from jobdetails
    where job_no like '071[12]%'
    

    아니 정확히 당신은 무엇을 요구하고 있지만, 동일한 효과를 가지고 있으며, 너무 다른 방법으로 유연 :)

  5. ==============================

    5.

    SELECT c.* FROM(
    SELECT '071235' AS token UNION ALL SELECT '07113' 
     UNION ALL SELECT '071343'
    UNION ALL SELECT '0713SA'
    UNION ALL SELECT '071443') AS c
    JOIN (
    SELECT '0712%' AS pattern UNION ALL SELECT '0711%' 
     UNION ALL SELECT '071343') AS d
    ON c.token LIKE d.pattern
    
    071235
    07113
    071343
    
  6. ==============================

    6.나는 비슷한 목표를 가지고 있었다 - 그리고이 솔루션에 온 :

    나는 비슷한 목표를 가지고 있었다 - 그리고이 솔루션에 온 :

    select *
    from jobdetails as JD
    where not exists ( select code from table_of_codes as TC 
                          where JD.job_no like TC.code ) 
    

    나는 %를 포함하여 다양한 코드 ( '0,711퍼센트', '0,712퍼센트', 등), 필드 코드로, 내가 * table_of_codes가 * 전화 했어있는 테이블에 저장되어 있다고 가정하고있다.

    이 %가 코드의 테이블에 저장되어 있지 않은 경우, 그냥 '%'를 연결하여. 예를 들면 :

    select *
    from jobdetails as JD
    where not exists ( select code from table_of_codes as TC 
                          where JD.job_no like concat(TC.code, '%') ) 
    

    CONCAT 연 () 함수는 내가 아는 한, 특정 데이터베이스에 따라 달라질 수 있습니다.

    나는 그것이 도움이되기를 바랍니다. 나는 그것을에서 적응 :

    http://us.generation-nt.com/answer/subquery-wildcards-help-199505721.html

  7. ==============================

    7.여기 내가 사용하는 스크립트입니다 :

    여기 내가 사용하는 스크립트입니다 :

    Drop Table #UserMasks 
    Drop Table #TESTUserMasks 
    
    Create Table #TESTUserMasks (
        [User] [Int] NOT NULL,
        [Mask] [Nvarchar](10) NOT NULL)
    
    Create Table #UserMasks (
        [RN] [Int] NOT NULL,
        [Mask] [Nvarchar](10) NOT NULL)
    
    DECLARE @User INT
    SET @User = 74054
    
    Insert Into #UserMasks 
    select ROW_NUMBER() OVER ( PARTITION BY ProntoUserID ORDER BY Id DESC) AS RN,
           REPLACE(mask,'?','') Mask
    from dbo.Access_Masks 
    where prontouserid = @User
    
    DECLARE @TopFlag INT
    SET @TopFlag = 1
    
    WHILE (@TopFlag <=(select COUNT(*) from #UserMasks))
    BEGIN
        Insert Into #TestUserMasks 
        select (@User),Code from dbo.MaskArrayLookupTable 
        where code like (select Mask + '%' from #UserMasks Where RN = @TopFlag)
    
        SET @TopFlag = @TopFlag + 1
    END
    GO
    
    select * from #TESTUserMasks
    
  8. ==============================

    8.제레미 스미스가 그것을 게시 된 나는 그의의 특정 질문에 대답 할 수 있기 때문에, 나는, 정리해 것이다.

    제레미 스미스가 그것을 게시 된 나는 그의의 특정 질문에 대답 할 수 있기 때문에, 나는, 정리해 것이다.

    select *
    from jobdetails
    where job_no like '071[1-2]%'
    

    그냥 0,711% 및 0,712퍼센트이 필요한 경우에는 괄호 안에 범위를 배치 할 수 있습니다. (가) NOT 키워드를 위해 당신은 또한 [^ 1-2] %를 사용할 수 있습니다

  9. ==============================

    9.IN 연산자는 아무것도하지만 멋진 OR '='비교하지 않습니다. 사실이 목록은 10,000 항목에 대해 포함 된 경우 SQL 2000에 의한 관찰 보고서에 IN의 확장에 스택 오버 플로우 버그가 있음 '아무것도하지만이'너무 없습니다 (예, 항목의 10K를 쓰는 사람들이 ...있다). 그래서 당신은 그것에서 와일드 카드 매칭을 사용할 수 없습니다.

    IN 연산자는 아무것도하지만 멋진 OR '='비교하지 않습니다. 사실이 목록은 10,000 항목에 대해 포함 된 경우 SQL 2000에 의한 관찰 보고서에 IN의 확장에 스택 오버 플로우 버그가 있음 '아무것도하지만이'너무 없습니다 (예, 항목의 10K를 쓰는 사람들이 ...있다). 그래서 당신은 그것에서 와일드 카드 매칭을 사용할 수 없습니다.

  10. ==============================

    10.액세스 SQL에서, 나는 이것을 사용합니다. 나는 SQLSERVER이 같은 구문이 상상 것입니다.

    액세스 SQL에서, 나는 이것을 사용합니다. 나는 SQLSERVER이 같은 구문이 상상 것입니다.

    고르다 * jobdetails에서 여기서 같은 "0711 *"와 같은 job_no 또는 job_no "0712 *"

  11. ==============================

    11.당신은 당신의 질문에 정답이있다. IN을 사용할 때 직접 와일드 카드 전달할 수 없습니다. 그러나 하위 쿼리를 사용할 수 있습니다.

    당신은 당신의 질문에 정답이있다. IN을 사용할 때 직접 와일드 카드 전달할 수 없습니다. 그러나 하위 쿼리를 사용할 수 있습니다.

    이 시도:

    select *
    from jobdetails
    where job_no in (
    select job_no
    from jobdetails
    where job_no like '0711%' or job_no like '0712%')
    )
    

    난 그냥 사용에 또는 당신의 WHERE 절에 충실 수있는, 즉이 외모 미친 알고있다. 왜 서브 쿼리? 다른 소스에서 세부 사항을 일치해야 할 때 어떻게 지금, 서브 쿼리의 접근 방식은 유용 할 것이다.

    주권

  12. ==============================

    12.이 시도

    이 시도

    select * 
    from jobdetails 
    where job_no between '0711' and '0713'
    

    유일한 문제는 그 일 '0713'가 아니라 반환 될 것입니다 그래서 '07299999999999'를 사용하거나 '0713'를 추가하고 job_no <>

    및 zamir

  13. ==============================

    13.이 힘 나와있는 같은 가장 간단한 솔루션 사용

    이 힘 나와있는 같은 가장 간단한 솔루션 사용

    select *
    from jobdetails
    where job_no like any ('0711%', '0712%')
    

    테라 데이타 이것은 잘 작동합니다.

  14. from https://stackoverflow.com/questions/1076097/sql-server-using-wildcard-within-in by cc-by-sa and MIT license