Como selecionar apenas a data de um campo DATETIME no MySQL?

115

Eu tenho uma tabela no banco de dados MySQL que está configurada com DATETIME. Eu preciso SELECTnesta tabela apenas em DATE e excluindo a hora.

Como faço SELECTpara nesta tabela apenas por data e ignorando a hora, mesmo se essa coluna específica estiver definida como DATETIME?


Exemplo

Agora é: 2012-01-23 09:24:41

Preciso fazer um SELECTapenas para isso:2012-01-23

DiegoP.
fonte
possível duplicata do problema de comparação de datas
Marcus Adams

Respostas:

165

SELECT DATE(ColumnName) FROM tablename;

Mais sobre a função MySQL DATE () .

Balaswamy Vaddeman
fonte
Estou tentando fazer isso, mas não funciona $ query = "SELECT * FROM Perfis WHERE date (DateReg = '". $ Date. "')";
DiegoP.
2
data (datereg) = 'dateHere'
Balaswamy Vaddeman
$ query = "SELECT * FROM Perfis WHERE date (DateReg) = '". $ date. "'"; Isso deve funcionar. Certifique-se de que ambas as datas tenham o mesmo formato, se não formate $ date antes de usar a cláusula in 'where ".
Clain Dsilva
Acho que você precisa ter cuidado com isso porque não vai usar um índice no ColumnName
d0x
Não se esqueça de adicionar o símbolo de acento Grave `antes e depois do nome da coluna. Em algumas versões do MySql, pode mostrar a data atual.
user2092317
40

você pode usar date_format

select DATE_FORMAT(date,'%y-%m-%d') from tablename

para fuso horário

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
sushant goel
fonte
Isso funciona perfeitamente porque agora posso selecionar dados de determinados dias apenas tendo o formato de data '% d'.
mjwrazor
selecione DATE_FORMAT (data, '% Y-% m-% d') de tablename pequeno "y" não está retornando ano maiúsculo "Y" em vez disso
Nirav Joshi
14

Você pode usar select DATE(time) from appointment_detailsapenas para data

ou

Você pode usar select TIME(time) from appointment_detailsapenas por algum tempo

user1061865
fonte
13

Tente usar
hoje:

SELECT * FROM `tbl_name` where DATE(column_name) = CURDATE()


para a data selecionada:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Mohammed Aly
fonte
2020: Obrigado amigo!
MarcoZen
10

No MYSQL temos uma função chamada DATE_FORMAT (data, formato) . No seu caso, a declaração selecionada ficará assim: -

SELECT DATE_FORMAT(dateTimeFieldName,"%a%m%Y") as dateFieldName FROM table_name

Para mais informações sobre as funções Mysql DATE e TIME, clique aqui.

Santosh D.
fonte
6

Simplesmente você pode fazer

SELECT DATE(date_field) AS date_field FROM table_name
krish kim
fonte
6

Tentei fazer um SELECT DATE(ColumnName), mas isso não funciona para as TIMESTAMPcolunas porque elas são armazenadas em UTC e a data UTC é usada em vez de converter para a data local. Eu precisava selecionar as linhas que estavam em uma data específica no meu fuso horário, combinando minha resposta a esta outra pergunta com a resposta de Balaswamy Vaddeman a esta pergunta , eis o que fiz:

Se você estiver armazenando datas como DATETIME

Apenas faça SELECT DATE(ColumnName)

Se você estiver armazenando datas como TIMESTAMP

Carregue os dados de fuso horário no MySQL, caso ainda não tenha feito isso. Para servidores Windows, consulte o link anterior. Para servidores Linux, FreeBSD, Solaris e OS X, você faria:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Em seguida, formate sua consulta assim:

SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))

Você também pode colocar isso na WHEREparte da consulta como este (mas observe que os índices nessa coluna não funcionarão):

SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'

(Obviamente, substitua America/New_Yorkseu fuso horário local.)


A única exceção é se seu fuso horário local for GMT e você não fizer o horário de verão porque seu horário local é o mesmo que UTC.

Mike
fonte
3

Tente SELECT * FROM Profiles WHERE date(DateReg)=$dateonde $ date está em aaaa-mm-dd

alternativamente SELECT * FROM Profiles WHERE left(DateReg,10)=$date

Felicidades

Richie
fonte
3

Você pode tentar isso:

SELECT CURDATE();

Se você verificar o seguinte:

SELECT NOW(); SELECT DATE(NOW()); SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');

Você pode ver que leva muito tempo.

aymsoft
fonte
2
Select * from table_name where date(datetime)
Gurpreet Dhanoa
fonte
2

Por favor, tente esta resposta.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'
Sai Charan Tsalla
fonte
1

Usar DATE_FORMAT

select DATE_FORMAT(date,'%d') from tablename =>Date only

exemplo:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;
Hendry Tanaka
fonte
1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

Este pode ser usado para obter a data no formato 'aaaa-mm-dd'.

zaynomer
fonte
1

se a coluna de tempo estiver no carimbo de data / hora, você obterá o valor da data desse carimbo de data / hora usando esta consulta

SELECT DATE(FROM_UNIXTIME(time)) from table 
Rosmin
fonte
0

No interesse de realmente colocar uma solução de trabalho para esta questão:

SELECT ... WHERE `myDateColumn` >= DATE(DATE_FORMAT(NOW(),'%Y-%m-%d'));

Obviamente, você pode alterar a função NOW () para qualquer data ou variável que desejar.

Mo'in Creemers
fonte