Search code examples
sqlsql-serverwildcardazure-synapse

Wildcard characters how to match several words?


   CASE      
      WHEN PhoneNumber LIKE '%[0-9]EXT[0-9]%' 
         THEN REPLACE(PhoneNumber, 'EXT', ' EXT ')
      WHEN PhoneNumber LIKE '%[0-9]EST[0-9]%' 
         THEN REPLACE(PhoneNumber, 'EST', ' EXT ')
      WHEN PhoneNumber LIKE '%[0-9]XTN[0-9]%' 
         THEN REPLACE(PhoneNumber, 'XTN', ' EXT ')
      WHEN PhoneNumber LIKE '%[0-9]XT[0-9]%' 
         THEN REPLACE(PhoneNumber, 'XT', ' EXT ')
      WHEN PhoneNumber LIKE '%[0-9]EX[0-9]%' 
         THEN REPLACE(PhoneNumber, 'EX', ' EXT ')
      WHEN PhoneNumber LIKE '%[0-9]X[0-9]%' 
         THEN REPLACE(PhoneNumber, 'X', ' EXT ')
      WHEN PhoneNumber LIKE '%[0-9]E[0-9]%' 
         THEN REPLACE(PhoneNumber, 'E', ' EXT ')

I have a bunch of WHEN conditions in the CASE clause. Is it possible to put them together in only 1 WHEN condition? Microsoft Azure SQL Data Warehouse only supports wildcard characters.


Solution

  • Here is an option using Translate()

    Declare @YourTable Table ([PhoneNumber] varchar(50))  Insert Into @YourTable Values 
     ('(555) 555-1212 Ext 25')
    ,('(555) 555-1212 Est 25')
    ,('(555) 555-1212 Ext25')
    ,('(555) 555-1212 Ex 25')
    ,('(555) 555-1212 E25')
    ,('(555) 555-1212 X25')
    ,('(555) 555-1212 # 25')
     
    
    Select PhoneNumber
          ,replace(replace(replace(replace(
                                  translate(PhoneNumber,'ABCDEFGHIJKLMNOPQRSTUVWXYZ#'
                                                       ,'###########################')
                                  ,'#','†‡'),'‡†',''),'†‡','Ext ')
                                  ,'  ', ' '
                                  )
     From  @YourTable
    

    Results

    PhoneNumber             (No column name)
    (555) 555-1212 Ext 25   (555) 555-1212 Ext 25
    (555) 555-1212 Est 25   (555) 555-1212 Ext 25
    (555) 555-1212 Ext25    (555) 555-1212 Ext 25
    (555) 555-1212 Ex 25    (555) 555-1212 Ext 25
    (555) 555-1212 E25      (555) 555-1212 Ext 25
    (555) 555-1212 X25      (555) 555-1212 Ext 25
    (555) 555-1212 # 25     (555) 555-1212 Ext 25