Entendo que o SQL Server 2005 não oferece suporte DATE
e, portanto, não é possível converter uma data e hora como uma data.
O que eu quero fazer é listar todos os registros com data e hora em um dia inteiro da semana atual.
Portanto, preciso de todos os registros criados na segunda-feira da semana atual, ignorando o carimbo de data e hora. Atualmente, estou usando o seguinte, que mostra de segunda a sexta-feira da semana atual, mas inclui o carimbo de data/hora, o que significa que verei resultados diferentes dependendo de quando a consulta for executada:
set datefirst 1
select
DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Monday,
DATEADD(day, 2 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Tuesday,
DATEADD(day, 3 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as wednesday,
DATEADD(day, 4 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Thursday,
DATEADD(day, 5 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Friday
Alguém pode ajudar?
Minha saída esperada seria uma coluna para cada dia da semana atual, onde a semana começa na segunda-feira (ou seja: Datefirst 1). Por fim, vou usá-lo em uma declaração de caso como:
CASE
WHEN DateColumn >= DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) and DateColumn < DATEADD(day, 2 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE()))
THEN IntegerColumn
ELSE 0
END AS Monday
...Repetindo para cada dia da semana. Preciso acomodar os valores IntegerColumn que são adicionados ao longo da segunda-feira. Se nenhuma entrada DateColumn ocorrer nas horas de segunda-feira, um zero será exibido.
A data de hoje é 2016-02-11 e esta consulta retorna
2016-02-11 00:00:00.000
:Pode então ser incluído na
DATEADD
declaração:Isso dará esta saída:
Esta consulta retorna a data de domingo (
2016-02-06
esta semana):Ele pode ser usado com esta consulta e fornece a mesma saída:
Para registros com data na segunda-feira, esta consulta pode ser usada:
Ele gera linhas onde a data é maior ou igual a segunda-feira às 00:00 e antes de terça-feira às 00:00.
É melhor usar
date >= '20160101 00:00' and date < '20160102 00:00'
do queBETWEEN
. Consulte: Por que a data e a hora da minha pesquisa de consulta não correspondem?Exemplo completo ( SQL Fiddle ):
Consulta 1:
Consulta 2: