none
select pelos dias da semana RRS feed

  • Pergunta

  •  

    1º - Tenho uma consulta com varios campos e um deles é data

     

    No momento eu seleciono todos os campos e no vb eu separo atraves de contadores e loops as datas que são durante a semana (seg a sex) e as datas que são no final de semana (sab e dom), após isso eu coloco esses valores em duas labels.

    Isso funciona que é uma beleza, mais a tendencia é ficar mais lento já que a tabela vai crescer e os loops serão maiores etc.

     

    Ai vem duas coisas

     

     - o SQL consegue agrupar esses valores pelo dia da semana (seg, ter, qua ..., sab e dom) e contar isso para mim???

     - se Sim (espero), então como começar e onde procurar mais informações???

     

    Agradeço toda a ajuda.

     

    quinta-feira, 23 de outubro de 2008 19:44

Todas as Respostas

  • cara, tenta essa função

    Create Function fDiaSemana (@DATA datetime) Returns varchar(20)As
    Begin
    Declare
    @DIA int,
    @DIA_EXT varchar(20)
    Select @DIA = (Datepart(DW, @DATA))
    If @DIA = 1
    Set @DIA_EXT = 'DOM'
    If @DIA = 2
    Set @DIA_EXT = 'SEG'
    If @DIA = 3
    Set @DIA_EXT = 'TER'
    If @DIA = 4
    Set @DIA_EXT = 'QUA'
    If @DIA = 5
    Set @DIA_EXT = 'QUI'
    If @DIA = 6
    Set @DIA_EXT = 'SEX'
    If @DIA = 7
    Set @DIA_EXT = 'SAB'
    Return @DIA_EXT
    End

    Select fDiaSemana(GetDate())

    talvez te ajude
    quinta-feira, 23 de outubro de 2008 19:57
  • Boa Tarde,

     

    Dê uma olhada no código abaixo:

     

    Code Snippet

    CREATE TABLE tblDatas (Data SMALLDATETIME)

     

    INSERT INTO tblDatas VALUES ('20081006')

    INSERT INTO tblDatas VALUES ('20081007')

    INSERT INTO tblDatas VALUES ('20081008')

    INSERT INTO tblDatas VALUES ('20081009')

    INSERT INTO tblDatas VALUES ('20081010')

    INSERT INTO tblDatas VALUES ('20081011')

    INSERT INTO tblDatas VALUES ('20081012')

    INSERT INTO tblDatas VALUES ('20081013')

    INSERT INTO tblDatas VALUES ('20081014')

    INSERT INTO tblDatas VALUES ('20081015')

    INSERT INTO tblDatas VALUES ('20081016')

    INSERT INTO tblDatas VALUES ('20081017')

    INSERT INTO tblDatas VALUES ('20081018')

    INSERT INTO tblDatas VALUES ('20081019')

    INSERT INTO tblDatas VALUES ('20081020')

    INSERT INTO tblDatas VALUES ('20081021')

    INSERT INTO tblDatas VALUES ('20081022')

     

    -- Garante que o idioma é português

    SET LANGUAGE Portuguese

     

    -- Mostra as distribuições

    -- Escolhe o intervalo (esse passo é fundamental para desempenho)

    SELECT 'Distribuição de dias',

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'segunda-feira') AS Segunda,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'terça-feira') AS Terca,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'quarta-feira') AS Quarta,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'quinta-feira') AS Quinta,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'sexta-feira') AS Sexta,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'sábado') AS Sabado,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) = 'domingo') AS Domingo

     

     

    [ ]s,

     

    Gustavo

    quinta-feira, 23 de outubro de 2008 20:02
  •  

    entendi mais ou menos, mais não é bem isso, queria uma consulta ou algo do genero, que me retorne quantos registros foram cadastrados na semana corrente (seg a sex) e quantos foram cadastrados no fim de semana(sab e dom)

     

     

    quinta-feira, 23 de outubro de 2008 20:04
  • Oi Felipe,

     

    Tente esse:

     

    Code Snippet

    SELECT 'Distribuição de dias',

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) IN (

    'segunda-feira',

    'terça-feira',

    'quarta-feira',

    'quinta-feira',

    'sexta-feira')) AS DiasDaSemana,

    (SELECT COUNT(*) FROM tblDatas WHERE Data >= '20081001' AND Data < '20081101' AND

    DATENAME(weekday,Data) IN ('sábado','domingo')) AS FimDeSemana

     

    [ ]s,

     

    Gustavo

    quinta-feira, 23 de outubro de 2008 20:13
  • Pesquise mais um pouco e conversando com um dba aki do trampo, me deram uma dica para usar a função datepart

    Code Snippet

    Select count(data) from tabela where datepart(dw,data) betwen 2 and 6




    seria algo parecido com isso, vou testar amanhã
    quinta-feira, 23 de outubro de 2008 23:12