- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 7 meses atrás por
burga.
-
AutorPosts
-
30 de julho de 2010 às 4:47 pm #95320
VINI85
ParticipanteBom 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 DomingoMe ajudem valeu.
30 de julho de 2010 às 5:41 pm #95322diegomello
ParticipanteOpa, 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ábado31 rows selected
30 de julho de 2010 às 5:48 pm #95323VINI85
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ábado31 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.
30 de julho de 2010 às 5:56 pm #95324diegomello
ParticipanteBarbada, 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:0031 rows selected
30 de julho de 2010 às 5:58 pm #95325diegomello
ParticipanteEae, 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:0031 rows selected
31 de julho de 2010 às 12:44 am #95337burga
ParticipanteMesma 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)))); -
AutorPosts
- Você deve fazer login para responder a este tópico.