instrução do caso na sybase

Tenho o seguinte requisito para a consulta Sybase: -

Excluir abaixo se:

  • a SSN tem mais ou menos de nove dígitos
  • o SSN inclui caracteres não-numéricos
  • o SSN está em branco
  • a SSN inclui os mesmos algarismos (por exemplo, 000000000, 111111111 ou 999999999)
  • a SSN tem um 9 como o primeiro dígito e um 7, 8 ou 9 como o quarto dígito
  • o quarto e o quinto algarismos São 00 (excepto 800-00 -0000)
  • [7]o sexto a os nono algarismos são 0000

eu escrevi a declaração do caso como abaixo, mas não está a funcionar, alguém pode ajudar por favor:

SELECT CASE
    WHEN LEN(a.MEMBER_SSN) > 9 THEN ' '
    WHEN LEN(a.MEMBER_SSN) < 9 THEN ' '
    WHEN LTRIM(RTRIM(a.MEMBER_SSN)) like '%[A-Z,a-z]%' then ' '
    WHEN LTRIM(RTRIM(WHEN a.MEMBER_SSN)) like '%[0-9]%' then ' '
    WHEN LTRIM(RTRIM(a.MEMBER_SSN)) in ( '000000000','000000001','000000002','000000003','000000004','000000005','999999999','111111111','000000070','123456789','999999998','000000071','888888888', ) THEN ''
    WHEN LTRIM(RTRIM(a.MEMBER_SSN)) NOT LIKE '9__[789]%' THEN a.MEMBER_SSN ELSE ' '
    WHEN LTRIM(RTRIM(a.MEMBER_SSN)) NOT LIKE '____[00]%' THEN a.MEMBER_SSN ELSE ' '
    WHEN LTRIM(RTRIM(a.MEMBER_SSN)) NOT LIKE '_____[0000]%' THEN a.MEMBER_SSN ELSE ' '
    END AS SUBSCRIBER_SSN From dbo.MEMBER_TABLE a
Author: PM 77-1, 2016-10-08

1 answers

Aqui está uma versão mais Curta:

SELECT (CASE WHEN LEN(a.MEMBER_SSN) <> 9 THEN ' '
             WHEN a.MEMBER_SSN LIKE '%[^0-9]%' THEN ' '
             WHEN REPLACE(a.MEMBER_SSN, LEFT(a.MEMBER_SSN, 1), '') = '' THEN ' '
             WHEN a.MEMBER_SSN LIKE '9__[789]%' THEN ' '
             WHEN a.MEMBER_SSN LIKE '___00%' AND a.MEMBER_SSN <> '800-00-0000' THEN ' '
             WHEN a.MEMBER_SSN LIKE '%0000' THEN ' '
             ELSE a.MEMBER_SSN
        END) AS SUBSCRIBER_SSN
From dbo.MEMBER_TABLE a
Isto é quase uma transcrição directa das suas condições.
 0
Author: Gordon Linoff, 2016-10-08 03:20:59