SQL Multiple LIKE Statements

后端 未结 3 1453
夕颜
夕颜 2020-12-11 04:22

I\'m currently working on a report that shows me all post codes covered by our sales team.

Each team covers over 100 post codes. What i would like to do is create a

相关标签:
3条回答
  • 2020-12-11 04:42

    WITH CTE AS
    (
    SELECT VALUE
    FROM (
            VALUES ('B79'), ('BB1'), ('BB10'), ('BB11'), ('BB12'), ('BB18'), ('BB2'), ('BB3'), ('BB4'), ('BB5'), ('BB6'), ('BB8'), ('BB9'), ('BB94'), ('BD1'), ('BD10'), ('BD11'), ('BD12'), ('BD13'), ('BD14'),
                    ('BD15'), ('BD16'), ('BD17'), ('BD18'), ('BD19'), ('BD2'), ('BD20'), ('BD21'), ('BD22'), ('BD3'), ('BD4'), ('BD5'), ('BD6')
         ) V(VALUE)
    )   

    SELECT * FROM tbl_ClientFile T WHERE EXISTS ( SELECT TOP 1 1 FROM CTE WHERE T.CLNTPOST1 LIKE CTE.VALUE + '%')

    0 讨论(0)
  • 2020-12-11 04:44

    One of possible solutions. Create a table Prefix(v varchar(4)) where you insert those values. Then a solution would be:

    SELECT * 
    FROM tbl_ClientFile cf
    JOIN Prefix p on cf.CLNTPOST1 LIKE p.v + '%'
    

    To exclude duplicates if some prefix includes some another prefix like BB1, BB10, BB15...:

    SELECT DISTINCT cf.* 
    FROM tbl_ClientFile cf
    JOIN Prefix p on cf.CLNTPOST1 LIKE p.v + '%'
    
    0 讨论(0)
  • 2020-12-11 04:52

    Most of your likes are already covered by other likes. You can use likes with multiple values like this and get the same result:

    SELECT * FROM tbl_ClientFile
    WHERE 
      CLNTPOST1 LIKE ('B79%')
      OR CLNTPOST1 LIKE ('BB[12345689]%')
      OR CLNTPOST1 LIKE ('BD[1-6]%')
    

    If you check for CLNTPOST1 is like BB1%, then you don't have to check for BB11% OR BB12%

    0 讨论(0)
提交回复
热议问题