Ir para conteúdo
Fórum Script Brasil

Kakao

Membros
  • Total de itens

    463
  • Registro em

  • Última visita

Posts postados por Kakao

  1. Para mostrar os meses sem movimento fica assim:

    with v_entradas as (
        select
            date_trunc('month', ent_data) mes,
            sum(ent_valor) soma
        from entradas
        where extract(year from ent_data) = extract(year from now())
        group by 1
    ), v_saidas as (
        select
            date_trunc('month', sai_data) mes,
            sum(sai_valor) soma
        from saidas
        where extract(year from sai_data) = extract(year from now())
        group by 1
    )
    select
        to_char(gs.mes, 'YYYY-MM') mes,
        round(coalesce(e.soma, 0), 4) entrada,
        round(coalesce(s.soma, 0), 4) saida,
        round(coalesce(e.soma, 0) - coalesce(s.soma, 0), 4) saldo
    from
        v_entradas e
        inner join
        v_saidas s on e.mes = s.mes
        right outer join
        generate_series (
            date_trunc('year', now()),
            date_trunc('year', now()) + interval '1 year - 1 month',
            '1 month'
        ) gs(mes)

  2. Pelo que entendi o que você quer é isto:

    with v_entradas as (
        select
            date_trunc('month', ent_data) mes,
            sum(coalesce(ent_valor, 0)) soma
        from entradas
        where extract(year from ent_data) = extract(year from now())
        group by 1
    ), v_saidas as (
        select
            date_trunc('month', sai_data) mes,
            sum(coalesce(sai_valor, 0)) soma
        from saidas
        where extract(year from sai_data) = extract(year from now())
        group by 1
    )
    select
        to_char(e.mes, 'YYYY-MM') mes,
        round(e.soma, 4) soma,
        round(s.soma, 4) soma,
        round(e.soma - s.soma, 4) saldo
    from
        v_entradas e
        inner join
        v_saidas s on e.mes = s.mes

  3. Você pode concatenar os números numa string binária:

    create table jogo (
        codigo integer,
        num binary(2),
        primary key (codigo, num)
    );
    
    insert into jogo (codigo, num) values
    (1, concat(unhex(hex(240)), unhex(hex(40))))
    ;
    
    select
        codigo,
        conv(hex(left(num, 1)), 16, 10) n1,
        conv(hex(mid(num, 2, 1)), 16, 10) n2
    from jogo;
    +--------+------+------+
    | codigo | n1   | n2   |
    +--------+------+------+
    |      1 | 240  | 40   |
    +--------+------+------+

  4. O que aconteceu com o seu teste é que você digitou a string e ela foi com a codificação do seu terminal e aí ficou diferente do que está na base.

    Veja que quando você for comparar uma string vinda de um feed com a que está na base as duas vão ter a mesma codificação. A não ser que o desenvolvedor do feed fique alterando. Então me parece que trocar os caracteres especiais é uma complicação desnecessária. Se for realmente necessário trocar os caracteres então eu acho que vale a pena pensar um pouco mais se a abordagem do hash é a mais indicada.

  5. Crie um arquivo com os comandos que você quer que sejam executados, por exemplo meu_script.sql:

    select minha_funcao(meu_parametro);
    select outra_funcao();
    Se for Linux coloque o comando psql no seu crontab:
    * * * * * psql --file /caminho/para/meu_script.sql -U usuario_da_base minha_base &

    Se for Windows use o agendador de tarefas para rodar o script.

  6. Pra mim funcionou. Eu testei assim:

    create table fee_itens (
        ite_unico varchar(255),
        ite_codigo integer,
        ite_md5 binary(8)
    );
    
    insert into fee_itens (ite_unico, ite_codigo, ite_md5)
    values(
        'Veneno de aranha é usado em pesquisa contra disfunção erétil',
        7395927,
        unhex(left(md5('Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16))
    );
    
    select
        ite_codigo,
        ite_unico,
        ite_md5,
        unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16))
    FROM fee_itens
    where ite_md5 = unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16))
    ;
    +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------+
    | ite_codigo | ite_unico                                                        | ite_md5  | unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16))     |
    +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------+
    |    7395927 | Veneno de aranha é usado em pesquisa contra disfunção erétil     | *A(%1  | *A(%1                                                                                   |
    +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------+
    Teste a consulta a seguir e poste o resultado:
    select
        ite_codigo,
        ite_unico,
        ite_md5,
        unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16))
    FROM fee_itens
    where ite_codigo = 7395927
    ;
    +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------------+
    | ite_codigo | ite_unico                                                        | ite_md5  | UNHEX( LEFT( MD5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil' ) , 16 ) )     |
    +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------------+
    |    7395927 | Veneno de aranha é usado em pesquisa contra disfunção erétil     | *A(%1  | *A(%1                                                                                         |
    +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------------+

    Mostre o create da tabela fee_itens e também o insert da linha acima.

  7. Só não entendi bem a aplicação de fazer essa hash... é pra melhorar a performance na hora de fazer um SELECT nele?

    Exato. Uma busca em um campo binário indexado vai ser muito mais rápida do que um full text search. Se a consequência da colisão não é importante então você pode diminuir o tamanho do binary para 8 por exemplo para ficar mais eficiente:

    create table t (
        feed_unico_campo text,
        feed_unico_valor text,
        md5_hash binary(8)
    );
    
    insert into t (feed_unico_campo, feed_unico_valor, md5_hash)
    values
    ('ckslsdkdi', 'kdksoskd', unhex(left(md5(concat('ckslsdkdi', 'kdksoskd')), 16)))
    ;
    
    select *
    from t
    where md5_hash = unhex(left(md5(concat('ckslsdkdi', 'kdksoskd')), 16))
    ;

  8. Qual é o tamanho da string de texto? Uma opção é salvar o hash das strings concatenadas em uma coluna BINARY:

    create table t (
        feed_unico_campo text,
        feed_unico_valor text,
        md5_hash binary(16)
    );
    
    insert into t (feed_unico_campo, feed_unico_valor, md5_hash)
    values
    ('ckslsdkdi', 'kdksoskd', unhex(md5(concat('ckslsdkdi', 'kdksoskd'))))
    ;
    
    select *
    from t
    where md5_hash = unhex(md5(concat('ckslsdkdi', 'kdksoskd')))
    ;

    A chance de colisão de um hash md5 (128 bits) é insignificante:

    http://en.wikipedia.org/wiki/Birthday_para...obability_table

  9. select c.*, d.*, o.ip, o.domain, o.computer 
    from
        (
            select ip from cacic
            union
            select ip from dhcp
            union
            select ip from officescan
        ) u
        left join
        cacic c on u.ip = c.ip
        left join
        dhcp d on u.ip = d.ip
        left join
        officescan o on u.ip = o.ip
    where
        c.ip is null

  10. select t.id, t.cpf
    from (
        select cpf
        from (
            select id, cpf
            from t
            group by id, cpf
        ) s
        group by cpf
        having count(*) > 1
    ) s inner join t on t.cpf = s.cpf
    order by t.cpf, t.id

×
×
  • Criar Novo...