Come posso utilizzare il primo e l'ultimo giorno del mese successivo nella clausola where?Ricevi la prima e l'ultima data del mese prossimo in MySQL
risposta
Usa:
SELECT
DATE_SUB(
LAST_DAY(
DATE_ADD(NOW(), INTERVAL 1 MONTH)
),
INTERVAL DAY(
LAST_DAY(
DATE_ADD(NOW(), INTERVAL 1 MONTH)
)
)-1 DAY
) AS firstOfNextMonth,
LAST_DAY(
DATE_ADD(NOW(), INTERVAL 1 MONTH)
)AS lastOfNextMonth
# FIRST date of next month
select date_sub(date_add(curdate(), interval 1 month), interval day(curdate())-1 day);
# LAST date of next month
select date_sub(date_add(curdate(), interval 2 month), interval day(curdate()) day);
non sono sicuro che sia le query più brevi, ma lo fanno lavorare
Qual è la performance di questa soluzione contro la soluzione di Ponies? – Pacerier
Per l'ultimo giorno del mese successivo, è possibile utilizzare la funzione di LAST_DAY()
:
SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));
+-------------------------------------------------+
| LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) |
+-------------------------------------------------+
| 2010-07-31 |
+-------------------------------------------------+
1 row in set (0.00 sec)
Alcuni casi limite testati:
SELECT LAST_DAY(DATE_ADD('2010-01-31', INTERVAL 1 MONTH));
+----------------------------------------------------+
| LAST_DAY(DATE_ADD('2010-01-31', INTERVAL 1 MONTH)) |
+----------------------------------------------------+
| 2010-02-28 |
+----------------------------------------------------+
1 row in set (0.00 sec)
SELECT LAST_DAY(DATE_ADD('2010-02-28', INTERVAL 1 MONTH));
+----------------------------------------------------+
| LAST_DAY(DATE_ADD('2010-02-28', INTERVAL 1 MONTH)) |
+----------------------------------------------------+
| 2010-03-31 |
+----------------------------------------------------+
1 row in set (0.00 sec)
SELECT LAST_DAY(DATE_ADD('2010-08-31', INTERVAL 1 MONTH));
+----------------------------------------------------+
| LAST_DAY(DATE_ADD('2010-08-31', INTERVAL 1 MONTH)) |
+----------------------------------------------------+
| 2010-09-30 |
+----------------------------------------------------+
1 row in set (0.00 sec)
C'è anche un uso complicato della funzione DATE_FORMAT()
t o prendi il primo giorno di un mese. Si può usare come segue:
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01');
+---------------------------------------------------------------+
| DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH),'%Y-%m-01') |
+---------------------------------------------------------------+
| 2010-07-01 |
+---------------------------------------------------------------+
1 row in set (0.00 sec)
Pertanto:
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01') AS
FirstDayOfNextMonth,
LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) AS
LastDayOfNextMonth;
+---------------------+--------------------+
| FirstDayOfNextMonth | LastDayOfNextMonth |
+---------------------+--------------------+
| 2010-07-01 | 2010-07-31 |
+---------------------+--------------------+
1 row in set (0.00 sec)
@Daneil, DATE_FORMAT restituisce un 'var_string', non una data. Usa invece la mia soluzione. – Pacerier
select Convert(varchar(10),DateAdd(Day, 1, getdate() - Day(getdate()) + 1) -1,105)
select Convert(varchar(10),getdate(),105)
select year(getdate())
Penso che la tua risposta sia per SQL Server;). –
Ecco tutte le possibili soluzioni. Spero che questo vi aiuterà ... basta eseguire questo per ottenere tutti i dettagli
SELECT
DATE_SUB(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 DAY) AS GetLastDay,
DATE_FORMAT(NOW(),'%Y-%m-%d') AS GetTodaysDate,
DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 7 DAY) AS Add7DaysFromTodaysDate,
DATE_SUB(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 7 DAY) AS Substract7DaysFromTodaysDate,
DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 MONTH) AS Add1MonthFromTodaysDate,
DATE_FORMAT(NOW(),'%Y-%m-01') AS FirstDayCurrentMonth ,
LAST_DAY(DATE_FORMAT(NOW(),'%Y-%m-%d')) AS lastDayCurrentMonth,
DATE_SUB(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)),
INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS FirstOfNextMont007,
LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)) AS lastOfpREMonth,
DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)),
INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS FirstOfNextMonth,
LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS lastOfNextMonth
Come @DanielVassallo spiegato, recuperando l'ultimo giorno del mese prossimo è facile:
SELECT LAST_DAY(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH));
Per recuperare il primo giorno, si potrebbe prima definire una funzione personalizzata FIRST_DAY
(purtroppo MySQL non fornisce alcuna):
DELIMITER ;;
CREATE FUNCTION FIRST_DAY(day DATE)
RETURNS DATE DETERMINISTIC
BEGIN
RETURN ADDDATE(LAST_DAY(SUBDATE(day, INTERVAL 1 MONTH)), 1);
END;;
DELIMITER ;
E poi si potrebbe fare:
interrogazioneSELECT FIRST_DAY(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH));
Non possiamo semplicemente scrivere (last_day (current_date() + interval 1 month))? –
@UncleIroh, Sì, possiamo farlo, anche questo funziona. Ma c'è in realtà una soluzione ** ancora più breve **: http://stackoverflow.com/a/28844641/632951 – Pacerier
Shorter:
SELECT
ADDDATE(LAST_DAY(NOW()), 1) AS firstOfNextMonth,
LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS lastOfNextMonth
['curdate' è meglio] (http://stackoverflow.com/a/28844641/632951) di' ora in termini di velocità e trasporto intenzionale. Inoltre, '+' è migliore di 'DATE_ADD' in termini di leggibilità e lunghezza del comando. – Pacerier
Primo giorno del prossimo mese è semplicemente l'ultimo giorno di questo mese + 1:
select adddate(last_day(curdate()), 1)
Ultimo giorno del prossimo mese è semplicemente scorso giorno di (oggi + 1 mese):
select last_day(curdate() + interval 1 month))
Queste sono le soluzioni più semplici. Non sarai in grado di trovarne uno più corto.
Se è necessario il primo giorno del corrente mese , vedi https://stackoverflow.com/a/28966866/632951
Per ottenere prima data del prossimo mese: - select LAST_DAY(NOW()) + INTERVAL 1 DAY
Per ottenere ultima data del prossimo mese: - select LAST_DAY(NOW()+ INTERVAL 1 Month)
- 1. Ricevi prima, ultimo giorno del mese?
- 2. Ottenere prima Domenica del mese prossimo con T-SQL
- 3. Come posso ottenere la data del prossimo mese dalla data odierna e inserirla nel mio database?
- 4. Come ottenere la prima data del mese corrente in Node.js?
- 5. Ricevi l'ultimo giorno del mese?
- 6. SQL Server 2005 Ricevi prima e ultima data per qualsiasi mese in qualsiasi anno
- 7. Ricevi l'anno prossimo dall'attuale NSDate?
- 8. java ottiene la prima data e l'ultima data del mese e l'anno specificato
- 9. Ottenere prima e l'ultima data del mese precedente
- 10. Impedisci alla data non valida di essere convertita in data del prossimo mese in jdk6?
- 11. Come ottenere la prima data e l'ultima data del mese precedente? (Java)
- 12. Ottenere la data del prossimo lunedì
- 13. mysql ultimo mese data estratto
- 14. Ottenere la prima data del mese precedente dalla data corrente in JavaScript
- 15. Data e ora del mysql()
- 16. PHP: il modo più semplice per ottenere la data del mese 6 mesi prima del primo?
- 17. Come ottenere l'inizio del mese della data e la data di fine della data?
- 18. Crea data dai campi giorno, mese, anno in MySQL
- 19. Il mese prossimo, lo stesso giorno in PHP
- 20. SQL: Come produrre la data successiva data mese e giorno
- 21. Ricevi la data del lunedì di questa settimana a Postgres?
- 22. Ottenere la data del mese scorso in php
- 23. Funzione per la settimana del mese in mysql
- 24. Data oggetto con anno e mese solo
- 25. Ricevi la prima e l'ultima lezione con jQuery
- 26. Forma standalone del nome del mese in formato data Java
- 27. Data e ora di inizio e fine del mese
- 28. Ricevi mese tradottoNomi/giornoNome come matrice in Yii
- 29. Rails - Ricevi le date di inizio e fine della settimana e del mese corrente
- 30. javascript data dell'ultimo giorno del mese precedente
+1 per risparmiare molte ore – dakshbhatt21
Per altre funzioni relative al tempo MySQL come questa, vedere [questo post del blog] (http://sys-exit.blogspot.com/2013/06/mysql-today-tomorrow-yesterday- this.html) – ducin
@OMGPonies, usa 'cagliadella' invece di' ora() 'perché non abbiamo bisogno dei tempi. Inoltre, per il primo giorno, è più semplice [semplicemente il numero di giorni del mese in corso] (http://stackoverflow.com/a/28844641/632951). È anche più veloce perché stiamo facendo solo una singola chiamata 'date_sub()' e una singola chiamata 'day()'. – Pacerier