Se ho una data 01/01/2009, voglio scoprire che giorno era, ad es. Lunedì, martedì, ecc ...Ottenere il giorno della settimana in SQL 2005/2008
Esiste una funzione integrata per questo in SQL 2005/2008? O devo usare una tabella ausiliaria?
Se ho una data 01/01/2009, voglio scoprire che giorno era, ad es. Lunedì, martedì, ecc ...Ottenere il giorno della settimana in SQL 2005/2008
Esiste una funzione integrata per questo in SQL 2005/2008? O devo usare una tabella ausiliaria?
thx, avevo provato datename ma usato d, mi ha restituito un intero. dw funziona come previsto –
Ecco perché preferisco usare select datename (weekday, getdate()). Non devo ricordare che dw ritorna il giorno della settimana ... quando posso usare "feriale" invece. –
chiunque dia un'occhiata a questo - si noti che ** l'inizio predefinito della settimana è domenica **. Guarda la risposta di @ Sung su come cambiare in modo sicuro –
Anche se la risposta di SQLMenace è stata accettata, c'è un importante SET
opzione che si dovrebbe essere a conoscenza di
DATENAME volontà restituire la data corretta nome ma non lo stesso valore DATEPART se il primo giorno della settimana è stato modificato come illustrato di seguito.
declare @DefaultDateFirst int
set @DefaultDateFirst = @@datefirst
--; 7 First day of week is "Sunday" by default
select [@DefaultDateFirst] = @DefaultDateFirst
set datefirst @DefaultDateFirst
select datename(dw,getdate()) -- Saturday
select datepart(dw,getdate()) -- 7
--; Set the first day of week to * TUESDAY *
--; (some people start their week on Tuesdays...)
set datefirst 2
select datename(dw,getdate()) -- Saturday
--; Returns 5 because Saturday is the 5th day since Tuesday.
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5
select datepart(dw,getdate()) -- 5 <-- It's not 7!
set datefirst @DefaultDateFirst
Quindi, per ottenere un valore di datapart costante, si esegue '(@@ datefirst - 1 + datapart (giorno della settimana, data di scadenza))% 7'. La domenica sarà sempre zero. –
kindof orribile questa roba è statica in modo da avere a seguire l'originale di query, modificare il valore, interrogare correre, reset originale modello –
sì, tu sei uomo giusto, questa è una nota importante (Y) –
per ottenere un valore deterministico per il giorno della settimana per una certa data è possibile utilizzare una combinazione di DATEPART() e @@datefirst. Altrimenti dipende dalle impostazioni sul server.
controllare il seguente sito per una soluzione migliore: MS SQL: Day of Week
Il giorno della settimana sarà quindi nel range 0-6, dove 0 è Domenica, 1 è Lunedi, ecc Poi è possibile utilizzare un semplice dichiarazione del caso per restituire il nome del giorno della settimana corretto.
Inserisci la risposta nella risposta in modo che le persone non debbano fare clic su un collegamento per raggiungerlo. –
Questo sarebbe accettato come risposta corretta. Grazie. – Juozas
SELECT CASE DATEPART(WEEKDAY,GETDATE())
WHEN 1 THEN 'SUNDAY'
WHEN 2 THEN 'MONDAY'
WHEN 3 THEN 'TUESDAY'
WHEN 4 THEN 'WEDNESDAY'
WHEN 5 THEN 'THURSDAY'
WHEN 6 THEN 'FRIDAY'
WHEN 7 THEN 'SATURDAY'
END
Dovresti sapere che c'è una funzione integrata per ottenere lo stesso risultato. 'select datename (dw, getdate())' –
Grazie, la funzione incorporata può ridurre la riga di codice – Sutirth
@SohamDasgupta questa funzione incorporata non restituisce lo stesso risultato per la versione non inglese di MS SQL. –
Si tratta di una copia di lavoro del mio codice a controllare, come retrive nome del giorno a partire dalla data in SQL
CREATE Procedure [dbo].[proc_GetProjectDeploymentTimeSheetData]
@FromDate date,
@ToDate date
As
Begin
select p.ProjectName + ' (' + st.Time +' '+'-'+' '+et.Time +')' as ProjectDeatils,
datename(dw,pts.StartDate) as 'Day'
from
ProjectTimeSheet pts
join Projects p on pts.ProjectID=p.ID
join Timing st on pts.StartTimingId=st.Id
join Timing et on pts.EndTimingId=et.Id
where pts.StartDate >= @FromDate
and pts.StartDate <= @ToDate
END
Felice di codifica ....
Che ne dici di un tagging felice? ;) – tamasgal
ah ah ah ...... –
Si può trovare questa versione utile .
-- Test DATA
select @@datefirst
create table #test (datum datetime)
insert #test values ('2013-01-01')
insert #test values ('2013-01-02')
insert #test values ('2013-01-03')
insert #test values ('2013-01-04')
insert #test values ('2013-01-05')
insert #test values ('2013-01-06')
insert #test values ('2013-01-07')
insert #test values ('2013-01-08')
-- Test DATA
select Substring('Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun,Mon,Tue,Wed,Thu,Fri,Sat',
(DATEPART(WEEKDAY,datum)[email protected]@datefirst-1)*4+1,3),Datum
from #test
Questo è il codice ottusa, e non dà alcuna indicazione di quello che sta facendo o cercando di raggiungere – brewmanz
EUROPA:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
Si prega di includere spiegazione di ciò che il codice fa e come si risponde alla domanda. Se ottieni uno snippet di codice come risposta, potresti non sapere cosa farne. La risposta dovrebbe fornire all'OP e ai futuri visitatori indicazioni su come eseguire il debug e risolvere il problema. Sottolineando l'idea alla base del tuo codice, è di grande aiuto per comprendere il problema e applicare o modificare la tua soluzione. – Palec
Con SQL Server 2012 e poi è possibile utilizzare la funzione di
SELECT FORMAT(GETDATE(), 'dddd')
FORMAT
Se non si vuole dipendere da @@DATEFIRST
o utilizzare DATEPART(weekday, DateColumn)
, basta calcola tu stesso il giorno della settimana.
Per settimane lunedì all'occupazione (Europa) più semplice è:
SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay
Per settimane a base di Domenica (America) Uso:
SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay
Questa restituire il numero giorno della settimana (da 1 a 7) sempre da gennaio 1 rispettivamente 7th, 1753.
Se si dispone di una tabella contenente ricerche per le porzioni di data, in genere si è fatto qualcosa di sbagliato.Le funzioni di data di SQL Server sono molte e robuste, quindi è possibile eseguire prontamente i dati da estrarre da una data in una colonna datetime. Le tabelle ausiliarie –
sono molto utili per i calcoli di date, non è insolito avere una tabella ausiliaria di calendario ... –
"Utile per i calcoli di date" è molto dubbio. La maggior parte dei calcoli di date può essere gestita senza alcun tipo di tabella ausiliaria e funzionerà anche meglio. In alcuni casi, una semplice tabella Numbers farà il lavoro - non c'è bisogno di una tabella con date effettive al suo interno. L'unica ragione per cui ho visto che è necessaria una tabella di calendario effettiva è quando le regole per quali giorni sono giorni di lavoro e quali giorni non sono molto complicati. Quello che ho visto fin troppo spesso è che le persone usano le tabelle delle date perché non sanno come farlo in un altro modo. Quindi devono popolare la tabella della data ogni tanto. Silly. – ErikE