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

Posted

技术标签:

【中文标题】如何从 MySQL 的 DATETIME 字段中仅选择日期?【英文标题】:How to select only date from a DATETIME field in MySQL? 【发布时间】:2012-02-20 08:50:48 【问题描述】:

我在 mysql 数据库中有一个使用DATETIME 设置的表。我需要在此表中 SELECT 仅在 DATE 之前,不包括时间。

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

示例

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

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

【问题讨论】:

MySQL date comparison issue的可能重复 【参考方案1】:

SELECT DATE(ColumnName) FROM tablename;

更多关于MySQL DATE() function。

【讨论】:

我正在尝试这样做,但它不起作用 $query="SELECT * FROM Profiles WHERE date(DateReg='".$date."')"; $query="SELECT * FROM Profiles WHERE date(DateReg) ='".$date."'";这应该有效。确保两个日期的格式相同,如果没有在使用“where”子句之前格式化 $date。 我认为你需要小心,因为它不会使用 ColumnName 上的索引 不要忘记在列名前后添加重音符号`。在某些 MySql 版本中,它可能会显示当前日期。【参考方案2】:

你可以使用 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”来选择特定日期的数据。 select DATE_FORMAT(date,'%Y-%m-%d') from tablename 小“y”不返回年份,改用大写“Y”【参考方案3】:

您只能使用select DATE(time) from appointment_details 表示日期

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

【讨论】:

【参考方案4】:

尝试使用 今天:

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

选定日期:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')

【讨论】:

【参考方案5】:

在 MYSQL 中,我们有一个名为 DATE_FORMAT(date,format) 的函数。 在您的情况下,您的 select 语句将变成这样:-

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

关于Mysql DATE和TIME函数的更多信息 click here.

【讨论】:

【参考方案6】:

你可以做到的

SELECT DATE(date_field) AS date_field FROM table_name

【讨论】:

【参考方案7】:

我尝试创建SELECT DATE(ColumnName),但是对于TIMESTAMP,这不起作用,因为它们以 UTC 格式存储并且使用 UTC 日期而不是转换为当地日期。我需要在我的时区中选择特定日期的行,因此将我的answer to this other question 与Balaswamy Vaddeman's answer to this question 结合起来,这就是我所做的:

如果您将日期存储为DATETIME

只要SELECT DATE(ColumnName)

如果您将日期存储为TIMESTAMP

Load the time zone data into 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 相同。

【讨论】:

【参考方案8】:

请试试这个答案。

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

【讨论】:

【参考方案9】:

试试 SELECT * FROM Profiles WHERE date(DateReg)=$date 其中 $date 在 yyyy-mm-dd 中

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

干杯

【讨论】:

【参考方案10】:

你可以试试这个:

SELECT CURDATE();

如果您检查以下内容:

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

您可以看到它需要很长时间。

【讨论】:

【参考方案11】:
Select * from table_name where date(datetime)

【讨论】:

【参考方案12】:

使用DATE_FORMAT

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

示例:

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

【讨论】:

【参考方案13】:
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

这个可以用来获取'yyyy-mm-dd'格式的日期。

【讨论】:

【参考方案14】:

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

SELECT DATE(FROM_UNIXTIME(time)) from table 

【讨论】:

【参考方案15】:

你可以使用 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');"

您可以从约会详细信息中选择日期(时间)仅用于日期

or

You can use select TIME(time)  from appointment_details for time only
if time column is on timestamp , you will get date value from that timestamp using this query

从表中选择 DATE(FROM_UNIXTIME(time))

【讨论】:

【参考方案16】:

为了实际解决这个问题:

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

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

【讨论】:

【参考方案17】:

我在我的 VB 应用程序中用一个简单的小函数(一行)解决了这个问题。从生产应用程序中取出的代码。函数如下所示:

Public Function MySQLDateTimeVar(inDate As Date, inTime As String) As String
Return "'" & inDate.ToString(format:="yyyy'-'MM'-'dd") & " " & inTime & "'"
End Function

用法: 假设我有 DateTimePicker1 和 DateTimePicker2,用户必须定义​​开始日期和结束日期。不管日期是否相同。我需要仅使用 DATE 查询 DATETIME 字段。我的查询字符串很容易像这样构建:

Dim QueryString As String = "Select * From SOMETABLE Where SOMEDATETIMEFIELD BETWEEN " & MySQLDateTimeVar(DateTimePicker1.Value,"00:00:00") & " AND " & MySQLDateTimeVar(DateTimePicker2.Value,"23:59:59")

该函数为查询中的 DATETIME 字段生成正确的 MySQL DATETIME 语法,并且查询正确返回该 DATE(或 DATES 之间)的所有记录。

【讨论】:

以上是关于如何从 MySQL 的 DATETIME 字段中仅选择日期?的主要内容,如果未能解决你的问题,请参考以下文章

在 FileNet 内容引擎中仅使用日期查询 DateTime 字段

如何从日期时间对象中仅提取月份和日期?

Nullable-如何在 C# 中的 DateTime 类型中仅比较没有时间的日期?

如何在 C# 中仅从 DateTime 序列化 Xml 日期

BigQuery:如何从重复记录中仅提取某些字段作为另一个重复字段

如何从 EF 中的表中仅选择某些字段