locked
Consultar dados com mascara - SQL Server RRS feed

  • Pergunta

  • Tenho a seguinte estrutura:

    http://sqlfiddle.com/#!9/29027c4/1

    CREATE TABLE PATRIMONIO (
    NUM_PATRIMONIO VARCHAR(100),
    DESCRICAO_PATRIMONIO VARCHAR(100)
    );

    INSERT INTO PATRIMONIO 
    VALUES ('HDT-2725','VW/GOL 1.0 GER IV'),
    ('HDT-2744','VW/GOL 1.0 GER IV'),
    ('HDT-2751','VW/GOL 1.0 GER IV'),
    ('HDT-2764','Fiat Palio Celebration 1.4 Fire Flex 8V 4p'),
    ('002376','Notebook Dell i5 8GB 1TB')

    Com o seguinte select:

        SELECT NUM_PATRIMONIO, DESCRICAO_PATRIMONIO FROM PATRIMONIO

    Essa não é a estrutura completa da tabela, isso foi apenas um exemplo que trouxe de como os dados estão aparecendo. No momento, eles estão vindo assim:

    NUM_PATRIMONIO DESCRICAO_PATRIMONIO
    HDT-2725         VW/GOL 1.0 GER IV
    HDT-2744         VW/GOL 1.0 GER IV
    HDT-2751         VW/GOL 1.0 GER IV
    HDT-2764         Fiat Palio Celebration 1.4 Fire Flex 8V 4p
    002376 Notebook Dell i5 8GB 1TB

    E eu preciso que o retorno seja apenas os veículos que estão com a mascara das placas `XXX-0000`. O banco só possui placas brasileiras, então outros formatos são irrelevantes.       

    Já tentei procurar alguma função ou até formas de fazer essa consulta no google, mas o que eu sempre acho são pessoas procurando como consultar um cpf sem mascara e por a mascara no momento da consulta. Mas eu não quero por a mascara, eu preciso filtrar os dados que já estão com essa mascara `XXX-0000`.

    O banco de dados é SQL Server. 
    quinta-feira, 5 de setembro de 2019 14:28

Respostas

Todas as Respostas

  • Como é o valor de pesquisa se trata de um campo texto, acho que uma solução para sua consulta seria algo assim: SELECT * FROM PATRIMONIO
    WHERE LENGTH(LTRIM(RTRIM(NUM_PATRIMONIO))) = 8
    AND NUM_PATRIMONIO LIKE '%-%'
    quinta-feira, 5 de setembro de 2019 14:39
  • Boa tarde,

    Layla, experimente fazer uns testes dessa forma:

    WHERE NUM_PATRIMONIO LIKE '[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9]'

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Layla Comparin quinta-feira, 5 de setembro de 2019 17:26
    quinta-feira, 5 de setembro de 2019 15:33
  • Como é o valor de pesquisa se trata de um campo texto, acho que uma solução para sua consulta seria algo assim: SELECT * FROM PATRIMONIO
    WHERE LENGTH(LTRIM(RTRIM(NUM_PATRIMONIO))) = 8
    AND NUM_PATRIMONIO LIKE '%-%'

    Deu erro esse procedimento..

    Msg 195, Level 15, State 10, Line 11
    'LENGTH' is not a recognized built-in function name.
    quinta-feira, 5 de setembro de 2019 17:29
  • Boa tarde,

    Layla, experimente fazer uns testes dessa forma:

    WHERE NUM_PATRIMONIO LIKE '[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9]'

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    Muito obrigada. Era exatamente isso que eu precisava!. :)
    quinta-feira, 5 de setembro de 2019 17:29