Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #95320
    VINI85
    Participante

      Bom dia galera,

      Preciso desenvolver um cartão de ponto com os dias e deixar pré-fixado o horário de almoço.

      Ex:

      Dia Entrada Saida Entrada Saida
      1 Domingo
      2 12:00 13:00
      3 12:00 13:00
      4 12:00 13:00
      5 12:00 13:00
      6 12:00 13:00
      7 Sabado
      8 Domingo

      Me ajudem valeu.

      #95322
      diegomello
      Participante

        Opa, tudo certo?
        Vê se te ajuda…


        SQL> SELECT dia_mes
        2 ,CASE
        3 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
        4 TO_CHAR(dia_mes + 12 / 24, 'dd/mm/rrrr hh24:mi')
        5 ELSE
        6 TO_CHAR(dia_mes, 'Day', 'NLS_DATE_LANGUAGE=PORTUGUESE')
        7 END entrada
        8 ,CASE
        9 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
        10 dia_mes + 13 / 24
        11 END saida
        12 FROM (SELECT data + LEVEL - 1 dia_mes
        13 FROM (SELECT TRUNC(SYSDATE, 'mm') data
        14 FROM dual)
        15 CONNECT BY data + LEVEL - 1 <= LAST_DAY(TRUNC(SYSDATE)));

        DIA_MES ENTRADA SAIDA


        1/7/2010 01/07/2010 12:00 1/7/2010 13:00
        2/7/2010 02/07/2010 12:00 2/7/2010 13:00
        3/7/2010 Sábado
        4/7/2010 Domingo
        5/7/2010 05/07/2010 12:00 5/7/2010 13:00
        6/7/2010 06/07/2010 12:00 6/7/2010 13:00
        7/7/2010 07/07/2010 12:00 7/7/2010 13:00
        8/7/2010 08/07/2010 12:00 8/7/2010 13:00
        9/7/2010 09/07/2010 12:00 9/7/2010 13:00
        10/7/2010 Sábado
        11/7/2010 Domingo
        12/7/2010 12/07/2010 12:00 12/7/2010 13:00
        13/7/2010 13/07/2010 12:00 13/7/2010 13:00
        14/7/2010 14/07/2010 12:00 14/7/2010 13:00
        15/7/2010 15/07/2010 12:00 15/7/2010 13:00
        16/7/2010 16/07/2010 12:00 16/7/2010 13:00
        17/7/2010 Sábado
        18/7/2010 Domingo
        19/7/2010 19/07/2010 12:00 19/7/2010 13:00
        20/7/2010 20/07/2010 12:00 20/7/2010 13:00
        21/7/2010 21/07/2010 12:00 21/7/2010 13:00
        22/7/2010 22/07/2010 12:00 22/7/2010 13:00
        23/7/2010 23/07/2010 12:00 23/7/2010 13:00
        24/7/2010 Sábado
        25/7/2010 Domingo
        26/7/2010 26/07/2010 12:00 26/7/2010 13:00
        27/7/2010 27/07/2010 12:00 27/7/2010 13:00
        28/7/2010 28/07/2010 12:00 28/7/2010 13:00
        29/7/2010 29/07/2010 12:00 29/7/2010 13:00
        30/7/2010 30/07/2010 12:00 30/7/2010 13:00
        31/7/2010 Sábado

        31 rows selected

        #95323
        VINI85
        Participante

          [quote=”diegomello”:1thcxgn9]Opa, tudo certo?
          Vê se te ajuda…


          SQL> SELECT dia_mes
          2 ,CASE
          3 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
          4 TO_CHAR(dia_mes + 12 / 24, 'dd/mm/rrrr hh24:mi')
          5 ELSE
          6 TO_CHAR(dia_mes, 'Day', 'NLS_DATE_LANGUAGE=PORTUGUESE')
          7 END entrada
          8 ,CASE
          9 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
          10 dia_mes + 13 / 24
          11 END saida
          12 FROM (SELECT data + LEVEL - 1 dia_mes
          13 FROM (SELECT TRUNC(SYSDATE, 'mm') data
          14 FROM dual)
          15 CONNECT BY data + LEVEL - 1 <= LAST_DAY(TRUNC(SYSDATE)));

          DIA_MES ENTRADA SAIDA


          1/7/2010 01/07/2010 12:00 1/7/2010 13:00
          2/7/2010 02/07/2010 12:00 2/7/2010 13:00
          3/7/2010 Sábado
          4/7/2010 Domingo
          5/7/2010 05/07/2010 12:00 5/7/2010 13:00
          6/7/2010 06/07/2010 12:00 6/7/2010 13:00
          7/7/2010 07/07/2010 12:00 7/7/2010 13:00
          8/7/2010 08/07/2010 12:00 8/7/2010 13:00
          9/7/2010 09/07/2010 12:00 9/7/2010 13:00
          10/7/2010 Sábado
          11/7/2010 Domingo
          12/7/2010 12/07/2010 12:00 12/7/2010 13:00
          13/7/2010 13/07/2010 12:00 13/7/2010 13:00
          14/7/2010 14/07/2010 12:00 14/7/2010 13:00
          15/7/2010 15/07/2010 12:00 15/7/2010 13:00
          16/7/2010 16/07/2010 12:00 16/7/2010 13:00
          17/7/2010 Sábado
          18/7/2010 Domingo
          19/7/2010 19/07/2010 12:00 19/7/2010 13:00
          20/7/2010 20/07/2010 12:00 20/7/2010 13:00
          21/7/2010 21/07/2010 12:00 21/7/2010 13:00
          22/7/2010 22/07/2010 12:00 22/7/2010 13:00
          23/7/2010 23/07/2010 12:00 23/7/2010 13:00
          24/7/2010 Sábado
          25/7/2010 Domingo
          26/7/2010 26/07/2010 12:00 26/7/2010 13:00
          27/7/2010 27/07/2010 12:00 27/7/2010 13:00
          28/7/2010 28/07/2010 12:00 28/7/2010 13:00
          29/7/2010 29/07/2010 12:00 29/7/2010 13:00
          30/7/2010 30/07/2010 12:00 30/7/2010 13:00
          31/7/2010 Sábado

          31 rows selected
          [/quote]

          Po diego, é isso mesmo que preciso…mas preciso sempre gerar com o mês seguinte…nesse caso tenho que gerar o mês de Agosto.

          #95324
          diegomello
          Participante

            Barbada, gurizão…
            É só adicionar um ADD_MONTHS.


            SQL> SELECT dia_mes
            2 ,CASE
            3 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
            4 TO_CHAR(dia_mes + 12 / 24, 'dd/mm/rrrr hh24:mi')
            5 ELSE
            6 TO_CHAR(dia_mes, 'Day', 'NLS_DATE_LANGUAGE=PORTUGUESE')
            7 END entrada
            8 ,CASE
            9 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
            10 dia_mes + 13 / 24
            11 END saida
            12 FROM (SELECT data + LEVEL - 1 dia_mes
            13 FROM (SELECT ADD_MONTHS(TRUNC(SYSDATE, 'mm'), 1) data
            14 FROM dual)
            15 CONNECT BY data + LEVEL - 1 <= LAST_DAY(TRUNC(data)));

            DIA_MES ENTRADA SAIDA


            1/8/2010 Domingo
            2/8/2010 02/08/2010 12:00 2/8/2010 13:00
            3/8/2010 03/08/2010 12:00 3/8/2010 13:00
            4/8/2010 04/08/2010 12:00 4/8/2010 13:00
            5/8/2010 05/08/2010 12:00 5/8/2010 13:00
            6/8/2010 06/08/2010 12:00 6/8/2010 13:00
            7/8/2010 Sábado
            8/8/2010 Domingo
            9/8/2010 09/08/2010 12:00 9/8/2010 13:00
            10/8/2010 10/08/2010 12:00 10/8/2010 13:00
            11/8/2010 11/08/2010 12:00 11/8/2010 13:00
            12/8/2010 12/08/2010 12:00 12/8/2010 13:00
            13/8/2010 13/08/2010 12:00 13/8/2010 13:00
            14/8/2010 Sábado
            15/8/2010 Domingo
            16/8/2010 16/08/2010 12:00 16/8/2010 13:00
            17/8/2010 17/08/2010 12:00 17/8/2010 13:00
            18/8/2010 18/08/2010 12:00 18/8/2010 13:00
            19/8/2010 19/08/2010 12:00 19/8/2010 13:00
            20/8/2010 20/08/2010 12:00 20/8/2010 13:00
            21/8/2010 Sábado
            22/8/2010 Domingo
            23/8/2010 23/08/2010 12:00 23/8/2010 13:00
            24/8/2010 24/08/2010 12:00 24/8/2010 13:00
            25/8/2010 25/08/2010 12:00 25/8/2010 13:00
            26/8/2010 26/08/2010 12:00 26/8/2010 13:00
            27/8/2010 27/08/2010 12:00 27/8/2010 13:00
            28/8/2010 Sábado
            29/8/2010 Domingo
            30/8/2010 30/08/2010 12:00 30/8/2010 13:00
            31/8/2010 31/08/2010 12:00 31/8/2010 13:00

            31 rows selected

            #95325
            diegomello
            Participante

              Eae, eu de novo..
              Esqueci de formatar as datas de entrada e saída 😛
              Segue o modo certo.


              SQL> SELECT dia_mes
              2 ,CASE
              3 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
              4 TO_CHAR(dia_mes + 12 / 24, 'hh24:mi')
              5 ELSE
              6 TO_CHAR(dia_mes, 'Day', 'NLS_DATE_LANGUAGE=PORTUGUESE')
              7 END entrada
              8 ,CASE
              9 WHEN TO_CHAR(dia_mes, 'd') BETWEEN 2 AND 6 THEN
              10 TO_CHAR(dia_mes + 13 / 24, 'hh24:mi')
              11 END saida
              12 FROM (SELECT data + LEVEL - 1 dia_mes
              13 FROM (SELECT ADD_MONTHS(TRUNC(SYSDATE, 'mm'), 1) data
              14 FROM dual)
              15 CONNECT BY data + LEVEL - 1 <= LAST_DAY(TRUNC(data)));

              DIA_MES ENTRADA SAIDA


              1/8/2010 Domingo
              2/8/2010 12:00 13:00
              3/8/2010 12:00 13:00
              4/8/2010 12:00 13:00
              5/8/2010 12:00 13:00
              6/8/2010 12:00 13:00
              7/8/2010 Sábado
              8/8/2010 Domingo
              9/8/2010 12:00 13:00
              10/8/2010 12:00 13:00
              11/8/2010 12:00 13:00
              12/8/2010 12:00 13:00
              13/8/2010 12:00 13:00
              14/8/2010 Sábado
              15/8/2010 Domingo
              16/8/2010 12:00 13:00
              17/8/2010 12:00 13:00
              18/8/2010 12:00 13:00
              19/8/2010 12:00 13:00
              20/8/2010 12:00 13:00
              21/8/2010 Sábado
              22/8/2010 Domingo
              23/8/2010 12:00 13:00
              24/8/2010 12:00 13:00
              25/8/2010 12:00 13:00
              26/8/2010 12:00 13:00
              27/8/2010 12:00 13:00
              28/8/2010 Sábado
              29/8/2010 Domingo
              30/8/2010 12:00 13:00
              31/8/2010 12:00 13:00

              31 rows selected

              #95337
              burga
              Participante

                Mesma consulta do diego, mas com decode ao invés de case, utilizando constantes nas horas e acréscimo do add_months também no conect by:

                SELECT dia_mes,
                DECODE(TO_CHAR(dia_mes, 'd'),1,'Domingo',7,'Sábado','12:00') saida,
                DECODE(TO_CHAR(dia_mes, 'd'),1,null,7,null,'13:00') entrada
                FROM (SELECT data + LEVEL - 1 dia_mes
                FROM (SELECT TRUNC(ADD_MONTHS(SYSDATE,1), 'mm') data
                FROM dual)
                CONNECT BY data + LEVEL - 1 <= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,1))));

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.