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


Respostas:


165

SELECT DATE(ColumnName) FROM tablename;

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


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');"

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


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')

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.


6

Simplesmente você pode fazer

SELECT DATE(date_field) AS date_field FROM table_name

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.


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


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.



2

Por favor, tente esta resposta.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'

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`;

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'.


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 

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.