Se eu tenho uma data 01/01/2009, quero descobrir que dia era, por exemplo, segunda, terça, etc ...
Existe uma função interna para isso no SQL Server 2005/2008? Ou preciso usar uma tabela auxiliar?
sql
sql-server
datetime
um cavalo sem nome
fonte
fonte
Respostas:
Use
DATENAME
ouDATEPART
:fonte
Mesmo que a resposta do SQLMenace tenha sido aceita, há uma
SET
opção importante que você deve conhecerDATENAME retornará o nome correto da data, mas não o mesmo valor DATEPART, se o primeiro dia da semana tiver sido alterado, conforme ilustrado abaixo.
fonte
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. Domingo será sempre zero.DayOfWeek
enumeração temDayOfWeek.Sunday
com um valor de ...0
. Portanto, não importa o queDateFirst
estiver definido, um valor retornado por SQL não tratadoWEEKDAY
nunca será compatível com o equivalente do .NET. Sim, Microsoft.fonte
select datename(dw,getdate())
Para obter um valor determinístico para o dia da semana em uma determinada data, você pode usar uma combinação de DATEPART () e @@ datefirst . Caso contrário, você depende das configurações do servidor.
Confira o site a seguir para uma solução melhor: MS SQL: dia da semana
O dia da semana estará no intervalo de 0 a 6, onde 0 é domingo, 1 é segunda-feira etc. Então você pode usar uma declaração de caso simples para retornar o nome correto do dia da semana.
fonte
EUROPA:
fonte
Com o SQL Server 2012 em diante, você pode usar a
FORMAT
funçãofonte
esta é uma cópia de trabalho do meu código, verifique, como recuperar o nome do dia da data no sql
fonte
Se você não quiser depender
@@DATEFIRST
ou usarDATEPART(weekday, DateColumn)
, apenas calcule o dia da semana.Nas semanas de segunda-feira (Europa), o mais simples é:
Para semanas baseadas no domingo (América), use:
Isso retorna o número do dia da semana (1 a 7) desde 1º de janeiro, respectivamente, 7 de janeiro de 1753.
fonte
Você pode usar,
DATEPART(dw, GETDATE())
mas esteja ciente de que o resultado dependerá do@@DATEFIRST
valor de configuração do servidor SQL, que é o primeiro dia da semana (na Europa, o valor padrão 7 é domingo).Se você deseja alterar o primeiro dia da semana para outro valor, pode usar,
SET DATEFIRST
mas isso pode afetar todos os lugares da sua sessão de consulta que você não deseja.Uma maneira alternativa é especificar explicitamente o valor do primeiro dia da semana como parâmetro e evitar dependendo da
@@DATEFIRST
configuração. Você pode usar a seguinte fórmula para conseguir isso quando necessário:onde
@WeekStartDay
é o primeiro dia da semana que você deseja para o seu sistema (de 1 a 7, o que significa de segunda a domingo).Coloquei-o na função abaixo para que possamos reutilizá-lo facilmente:
Exemplo de uso:
GetDayInWeek('2019-02-04 00:00:00', 1)
É equivalente ao seguinte (mas independente da configuração DATEFIRST do SQL Server):
fonte
Você pode encontrar esta versão útil.
fonte