如何从MySQL中的DATETIME字段中仅选择日期?


115

我在MySQL数据库中设置了一个表DATETIME。我只需要SELECT在DATE到此表中,并且不包括时间。

SELECT即使该特定列设置为,我如何仅通过日期和跳过时间在此表中DATETIME


现在它是: 2012-01-23 09:24:41

我需要为此做一个SELECT2012-01-23


Answers:


165

SELECT DATE(ColumnName) FROM tablename;

有关MySQL DATE()函数的更多信息。


我正在尝试执行此操作,但是它不起作用$ query =“ SELECT * FROM Profiles WHERE date(DateReg ='”。$ date。“')”;
DiegoP。

2
日期(datereg)= 'dateHere'
Balaswamy Vaddeman

$ query =“ SELECT * FROM配置文件中的date(DateReg)='”。$ date。“'”; 这应该工作。确保两个日期的格式相同,如果在'where“子句中使用之前未格式化$ date,则
Clain Dsilva 2013年

我认为您需要对此谨慎,因为它不会在ColumnName上使用索引
d0x

不要忘记在列名之前和之后添加Grave重音符号`。在某些MySql版本中,它可能会显示当前日期。
user2092317

40

您可以使用date_format

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

对于时区

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"

这很完美,因为现在我只需使用日期格式'%d'就可以从某些日期中选择数据。
mjwrazor

从表名 “ y”中选择DATE_FORMAT(date,'%Y-%m-%d')不返回年份使用资本“ Y”
Nirav Joshi

14

您只能select DATE(time) from appointment_details用于日期

要么

您只能使用select TIME(time) from appointment_details时间





6

我尝试执行SELECT DATE(ColumnName),但是不适用于TIMESTAMP列,因为它们存储在UTC中,并且使用UTC日期而不是转换为本地日期。我需要选择时区中特定日期的行,因此将对另一个问题的回答巴拉斯瓦米·瓦德曼对这个问题的回答结合起来,这就是我所做的:

如果您将日期存储为 DATETIME

做就是了 SELECT DATE(ColumnName)

如果您将日期存储为 TIMESTAMP

尚未将时区数据加载到MySQL中。对于Windows服务器,请参阅上一个链接。对于Linux,FreeBSD,Solaris和OS X服务器,您可以执行以下操作:

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

然后像这样格式化查询:

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

您也可以WHERE像这样将其放在查询的一部分中(但请注意,该列上的索引将不起作用):

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

(显然可以替代America/New_York您的本地时区。)


唯一的例外是,如果您的当地时区是格林尼治标准时间(GMT),并且您不执行夏令时,因为您的当地时间与UTC相同。


3

尝试 SELECT * FROM Profiles WHERE date(DateReg)=$date$ date在yyyy-mm-dd中的位置

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

干杯


3

您可以尝试以下方法:

SELECT CURDATE();

如果您检查以下内容:

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

您会看到它需要很长时间。




1

DATE_FORMAT

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

例:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;

1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

可以使用此格式以“ yyyy-mm-dd”格式获取日期。


1

如果time列在timestamp上,则将使用此查询从该时间戳获取日期值

SELECT DATE(FROM_UNIXTIME(time)) from table 

0

为了实际上为这个问题提出一个可行的解决方案:

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

显然,您可以将NOW()函数更改为所需的任何日期或变量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.