Saber Dia Útil usando Select, tem como?

30/01/2006

Olá colegas, estou postando aqui, pois creio que se houver como, deve servir pra qualquer banco.

A dúvida é a seguinte, preciso fazer uma instrução onde a mesma compare a data informada e se a mesma não cair em dia útil ela seja incrementada até ser.

em Delphi faço isso:

[color=orange:7f676d02dc] Case dayOfWeek(StrToDate(cdsTemp.FieldByName(´DATPAG´).AsString)) of 1: dm.cdsHeader.FieldByName(´DATPAG´).AsDateTime := (dm.cdsHeader.FieldByName(´DATPAG´).AsDateTime+2); // ´Domingo´ 7: dm.cdsHeader.FieldByName(´DATPAG´).AsDateTime := (dm.cdsHeader.FieldByName(´DATPAG´).AsDateTime+3); // ´Sabado ´ end;[/color:7f676d02dc]


como fazer usando SQL? :idea: :arrow:


Macario

Respostas

30/01/2006

Aasn

Olá Macario,

Para vc saber o dia da semana através de um select basta o seguinte:

select Extract(WeekDay from CampoData) from SuaTabela


[]´s
AASN


Responder Citar

30/01/2006

Macario

Ola [b:2e1630b3a4]AASN[/b:2e1630b3a4], bom dia.

Teste sua dica no Query Analyzer mas não funcionou

Incorrect syntax near the keyword ´from´.



Outro ponto se eu utilizar esta opção terei que estar fazendo isso em uma SP?


Responder Citar

30/01/2006

Emerson

no SQL Server é assim:
select
  datepart(weekday,CampoData) 
from
  Tabela


onde:
1 - Domingo
2 - Segunda-feira
...
7 - Sábado


Responder Citar

30/01/2006

Martins

no SQL Server é assim:
select
  datepart(weekday,CampoData) 
from
  Tabela
onde: 1 - Domingo 2 - Segunda-feira ... 7 - Sábado


E no Ib/Fb como seria?


Responder Citar

30/01/2006

Michael

Olá!

Até onde eu sei, não existem funções nativas em SQL. Cada banco de dados implementa seu grupo de rotinas independentes.

A função [b:383999f633]Extract[/b:383999f633], mencionada pelo colega [b:383999f633]AASN[/b:383999f633], só funciona do jeito desejado no [b:383999f633]Firebird[/b:383999f633]. No [b:383999f633]SQL Server[/b:383999f633], por exemplo, ela serve para extrair um elemento de um conjunto. Usa-se [b:383999f633]DatePart [/b:383999f633]para se extrair uma determinada informação, como o mês, o ano, o dia da semana, etc, de um campo (small) datetime.

Sua abordagem neste caso, se quiser usar SQL, vai depender do seu banco de dados.

[]´s


Responder Citar

30/01/2006

Michael

Olá [b:74d63e301a]Martins[/b:74d63e301a]!

No [b:74d63e301a]FB/IB[/b:74d63e301a] usa-se, como mencionado a pouco, [b:74d63e301a]Extract[/b:74d63e301a].

select Extract(weekday from CAMPO_DATA) as DiaSemana from TABELA


Mais aplicações com [b:74d63e301a]Extract [/b:74d63e301a]no FB/IB podem ser vistas [url=http://www.volny.cz/iprenosil/interbase/ip_ib_code_timestamp.htm]neste link[/url] e [url=http://firebird.sourceforge.net/index.php?op=useful&id=ostenried_1]neste tbm[/url].

[]´s


Responder Citar

30/01/2006

Aroldo Zanela

Ola [b:f8d4234514]AASN[/b:f8d4234514], bom dia. Teste sua dica no Query Analyzer mas não funcionou
Incorrect syntax near the keyword ´from´.
Outro ponto se eu utilizar esta opção terei que estar fazendo isso em uma SP?

Colega,

Com SQL Server (parece ser o seu caso):

declare @dia_semana int

select @dia_semana = DatePart(weekday, COLUNA_DATA) from SUA_TABELA
where COLUNA_CHAVE=80626

if @dia_semana in (1,7)
begin
  if @dia_semana = 1
  begin
    set @dia_semana = @dia_semana + 2
  end
  else
  begin
    set @dia_semana = @dia_semana + 3
  end
end



Responder Citar

30/01/2006

Macario

[quote]Ola [b:57bcd44233]AASN[/b:57bcd44233], bom dia. Teste sua dica no Query Analyzer mas não funcionou
Incorrect syntax near the keyword ´from´.
Outro ponto se eu utilizar esta opção terei que estar fazendo isso em uma SP?

Colega,

Com SQL Server (parece ser o seu caso):

declare @dia_semana int

select @dia_semana = DatePart(weekday, COLUNA_DATA) from SUA_TABELA
where COLUNA_CHAVE=80626

if @dia_semana in (1,7)
begin
  if @dia_semana = 1
  begin
    set @dia_semana = @dia_semana + 2
  end
  else
  begin
    set @dia_semana = @dia_semana + 3
  end
end
[/quote:57bcd44233]

Olá.

Obrigado pela ajuda de todos.

Alguem teria um ´esqueleto´ de um SP, para que eu possa com base na dica do [b:57bcd44233]Aroldo Zanela[/b:57bcd44233], tentar montar o que preciso. :idea: :arrow:


Responder Citar

30/01/2006

Aroldo Zanela

Colega,

Com o Enterprise Manager, vai na seção de StoredProcedures e clica com o botão direito e seleciona ´Nova´ que ele monta o esqueleto. Acho que aqui no fórum na seção de SQL Server deve ter alguma coisa também.


Responder Citar

30/01/2006

Macario

Valeu pela ajuda. Farei uma pesquisa.

Até mais.


Responder Citar