mysql all'uso - Come ottengo il primo giorno del mese corrente?





joomla 3.3 (10)


Ho usato la seguente query. Ha funzionato benissimo per me in passato.

select date(now()) - interval day(now()) day + interval 1 day

Devo selezionare i dati dal database MySQL tra il 1 ° giorno del mese corrente e il giorno corrente.

select*from table_name 
where date between "1st day of current month" and "current day"

Qualcuno può fornire un esempio funzionante di questa query?




select * from <table>
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
                  and curdate();



SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;



Soluzione completa per mysql mese corrente e anno in corso, che utilizza correttamente anche l'indicizzazione :)

-- Current month
SELECT id, timestampfield 
  FROM table1
 WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY)
   AND timestampfield <=  LAST_DAY(CURRENT_DATE);

-- Current year
SELECT id, timestampfield 
  FROM table1
 WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFYEAR(CURRENT_DATE)-1 DAY)
   AND timestampfield <=  LAST_DAY(CURRENT_DATE);



Stavo cercando una query simile in cui avevo bisogno di utilizzare il primo giorno di un mese nella mia query. La funzione last_day non ha funzionato per me, ma DAYOFMONTH è stato utile.

Quindi, se qualcuno sta cercando lo stesso problema, il codice seguente restituisce la data del primo giorno del mese corrente.

SELECT DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY);

Confronto tra una colonna della data e il primo giorno del mese:

select * from table_name where date between 
DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) and CURRENT_DATE



select * from table_name 
where `date` between curdate() - dayofmonth(curdate()) + 1
                 and curdate()

Esempio di SQLFiddle




SET @date:='2012-07-11';
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY), 
       interval -1 MONTH) AS first_day



select * from table
where date between 
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;



select * from table_name 
where (date between  DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE() )

O meglio :

select * from table_name 
where (date between  DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )



Quando elimini le tabelle innodb, MySQL non libera lo spazio all'interno del file ibdata, è per questo che continua a crescere. Questi file non si riducono quasi mai.

Come ridurre un file ibdata esistente:

http://dev.mysql.com/doc/refman/5.5/en/innodb-resize-system-tablespace.html

È possibile eseguire uno script e programmare lo script in modo che venga eseguito dopo un determinato periodo di tempo, ma per la configurazione descritta sopra sembra che più tablespace siano una soluzione più semplice.

Se si utilizza l'opzione di configurazione innodb_file_per_table , si creano più tablespace. Cioè, MySQL crea file separati per ogni tabella invece di un file condiviso. Questi file separati sono memorizzati nella directory del database e vengono eliminati quando si elimina questo database. Questo dovrebbe rimuovere la necessità di ridurre / eliminare i file ibdata nel tuo caso.

Ulteriori informazioni su più tablespace:

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html







mysql date get