如何从 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
我只需要为此做一个SELECT
:2012-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 日期