2013-05-20 15 views
30

ho bisogno di trovare l'ultimo giorno del mese nel seguente formato:SQL query per trovare l'ultimo giorno del mese

"2013-05-31 00:00:00:000" 

Chiunque si prega di dare una mano.

+1

possibile duplicato [Prendi l'ultimo giorno del mese in SQL] (http://stackoverflow.com/questions/1051488/get-the-last-day-of-the-month-in-sql) – Pondlife

+0

consulta https://codepedia.info/eomonth-last-date-month-in-sql-server/ –

risposta

58

Provate questo -

CREATE FUNCTION [dbo].[udf_GetLastDayOfMonth] 
(
    @Date DATETIME 
) 
RETURNS DATETIME 
AS 
BEGIN 

    RETURN DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @Date) + 1, 0)) 

END 

Query:

DECLARE @date DATETIME 
SELECT @date = '2013-05-31 15:04:10.027' 

SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @date) + 1, 0)) 

uscita:

----------------------- 
2013-05-31 00:00:00.000 
+1

Ricorda che se stai usando questo in un'istruzione tra per ottenere (ad esempio) tutti i record per un dato mese, questo escluderà i record dall'ultimo giorno. Potrebbe essere necessario utilizzare il primo giorno del mese successivo. – SteveCav

7
declare @date datetime; 
set @date = getdate(); -- or some date 
select dateadd(month,1+datediff(month,0,@date),-1); 
33

So che questo la domanda era per SQL Server 2005, ma ho pensato di menzionare - a partire da SQL 2012, ora c'è una funzione EOMONTH() che ottiene l'ultimo giorno del mese. Per ottenerlo nel formato specificato dal richiedente originale dovresti trasmettere a un datetime.

SELECT CAST(eomonth(GETDATE()) AS datetime) 
-1

http://php.net/manual/en/function.cal-days-in-month.php

La lunghezza in giorni del mese selezionato nel calendario data

<?php 
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31 
echo "There was $num days in August 2003"; 
?> 
+0

Non è proprio quello che la domanda sta ponendo, né qualcuno ha parlato di usare PHP. – Matt

1
dateadd(month,1+datediff(month,0,getdate()),-1) 

Per controllare run:

print dateadd(month,1+datediff(month,0,@date),-1) 
0

calcolare la data ultima di il mese è abbastanza semplice calcolo -

  1. Trova contano i mesi totale fino a data odierna tramite la funzione DATEDIFF (.., .., ..) - Select DATEDIFF (MM, 0, GETDATE())

Output - 1374, se GETDATE() in uscita è "2014/07/23 19: 33: 46,850"

  1. Incrementa di 1 in totale mesi di conteggio - Select DateDiff (MM, 0, GETDATE()) + 1

Output - 1375, se GETDATE() in uscita è "2014/07/23 19: 33: 46,850"

  1. Prendi il primo appuntamento del mese prossimo - Select DATEADD (MM, DATEDIFF (MM, 0 , GETDATE()) + 1,0)

uscita - '2014/08/01 00: 00: 00.000', se GETDATE() in uscita è "2014/07/23 19: 33: 46,850"

  1. Sottrai da -1 alla prima data del mese successivo, che restituirà l'ultima data del mese corrente - Seleziona DATEADD (DD, -1, DATEADD (MM, DATEDIFF (MM, 0, GETDATE()) + 1,0))

uscita - '2014/07/31 00:00:00.000' , se GETDATE() in uscita è '2014/07/23 19: 33: 46,850'

Allo stesso modo di calcolo possiamo raggiungere il - 1. Ultima data del prossimo mese 2. Ultima data di il mese precedente e così via ...

Spero che questo articolo possa essere d'aiuto.

0

Select DATEADD (DAY, - (DAY (DATEADD (MESE, 1, GETDATE()))), DATEADD (mese, 1, GETDATE()))

Questa grande opera in T-SQL ..

Sostituire la GETDATE() della query con il nome della colonna.

0
TO FIND 1ST and Last day of the Previous, Current and Next Month in Oracle SQL 
----------------------------------------------------------------------------- 
SELECT 
SYSDATE, 
LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1 FDPM, 
LAST_DAY(ADD_MONTHS(SYSDATE,-1)) LDPM, 
LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1 FDCM, 
LAST_DAY(SYSDATE)LDCM, 
LAST_DAY(SYSDATE)+1 FDNM, 
LAST_DAY(LAST_DAY(SYSDATE)+1) LDNM 
FROM DUAL 
+0

Wecome to StackOverflow! Ti preghiamo di aggiungere alcune spiegazioni al tuo codice. Grazie. – Aurasphere

Problemi correlati