How to select date from datetime column?
我有一个"datetime"类型的列,值如2009-10-20 10:00:00
我想从日期时间中提取日期,并编写如下查询:
以下是最好的方法吗?
号
但是,这将返回一个空的结果集。有什么建议吗?
可以使用mysql的DATE()函数:
您也可以尝试:
江户十一〔一〕号
有关使用LIKE的性能影响的信息,请参阅此答案。
- 我在这一日期:(日期时间)= 2009 - 10 - 20,它的作品
- 第一个is the the指数和ignores甚慢。is to have /类%是最好的日期是
- 你的第一个主页杀死茶表演!
- 日期(在DateTime类关键字% %)是其工作,谢谢
- This does not work我相信rails as if the expected is something other比UTC时区。This is because the column value)resolves日期(UTC)。such as"星期五我在2016年,30日00:00:00 00 + 08中士:"which we to find if we queried呼为"2016—12—30"will not be found。为什么?因为它resolve日期(UTC)将其当量在which is the做比较,"2016—12—29 16:00:00 UTC。如果我是正确的这是错误的。我也在recently直到我抓到你了。
- 在日期(日期时间)= {?sdate}厂perfectly for a水晶报告参数。好的工作!
- 谢谢你,我知道它已经工作了。
使用WHERE DATE(datetime) = '2009-10-20'有性能问题。如前所述:
- 它将计算所有行的DATE(),包括那些不匹配的行。
- 它将使查询无法使用索引
使用允许使用索引的BETWEEN或>、<、=运算符:
更新:在索引列中使用LIKE而不是运算符的影响很大。这些是对具有1176000行的表的一些测试结果:
- 使用datetime LIKE '2009-10-20%'=>2931ms
- 使用datetime >= '2009-10-20 00:00:00' AND datetime <= '2009-10-20 23:59:59'=>168ms
当对同一个查询进行第二次调用时,差异更大:2984ms与7ms(是的,仅7毫秒!).I在使用Hibernate重写项目中的一些旧代码时发现了这个问题。
- MySQL的兴趣,如果执行自动converts DATE(datetime)to get the short BETWEEN AND 随后声明我们的场景和酷的表现。为什么不呢?为什么不给他们做这?):
- 因为我的工作与BETWEENDATE(datetime) in (:list)doesnt something like
可以将日期时间格式化为y-m-d部分:
- 这样,你可以得到与只有部分时间:DATE_FORMAT(datetime, '%H:%i:%S')if needed
- 本厂在大格式的数据库返回datetime but the the Will Return to set the New array name for the name恩就在教育中_ the end date format(columnName,% m.% Y D for details)arrayname黑莓检查文献dev.mysql.com DOC / / / /恩/ & refman 8.0 hellip;
虽然页面上的所有答案都将返回所需的结果,但它们都存在性能问题。切勿对WHERE子句中的字段进行计算(包括DATE()计算),因为该计算必须对表中的所有行进行。
BETWEEN ... AND构造包含两个边界条件,要求其中一个在结束日期指定23:59:59语法,而这个结束日期本身存在其他问题(微秒事务,我认为2009年提出该问题时MySQL不支持)。
查询特定日期的mysql timestamp字段的正确方法是检查与所需日期是否大于等于,以及之后一天是否小于,而不指定小时。
1
| WHERE datetime >='2009-10-20' AND datetime <'2009-10-21' |
。
这是执行速度最快、内存最低、资源占用最少的方法,另外还支持所有MySQL特性和角情况,如次秒时间戳精度。此外,它是未来的证据。
- 和你的argument,使用性能,是"="">"和equally each of the table的行calculated在线,or the SQL服务器只知道"神奇般的"if a number是更大的比其他?:-)
- 我javierguerrero @:两个常数的compares example from the table和literal字符串。
- "the one from the table"is not a for each row常数不同,恩,我知道done has to be the same计算for each row(have to be both and also to,the时代转换时间做比较)
这是所有的格式
假设这是包含datetime值的列,表data。
1 2 3 4 5
| +--------------------+
| date_created |
+--------------------+
| 2018-06-02 15:50:30|
+--------------------+ |
1 2 3 4 5 6
| mysql > select DATE(date_created ) from data;
+--------------------+
| DATE(date_created ) |
+--------------------+
| 2018-06-02 |
+--------------------+ |
。
1 2 3 4 5 6
| mysql > select YEAR(date_created ) from data;
+--------------------+
| YEAR(date_created ) |
+--------------------+
| 2018 |
+--------------------+ |
号
1 2 3 4 5 6
| mysql > select MONTH(date_created ) from data;
+---------------------+
| MONTH(date_created ) |
+---------------------+
| 6 |
+---------------------+ |
号
1 2 3 4 5 6
| mysql > select DAY(date_created ) from data;
+-------------------+
| DAY(date_created ) |
+-------------------+
| 2 |
+-------------------+ |
号
1 2 3 4 5 6
| mysql > select HOUR(date_created ) from data;
+--------------------+
| HOUR(date_created ) |
+--------------------+
| 15 |
+--------------------+ |
号
1 2 3 4 5 6
| mysql > select MINUTE(date_created ) from data;
+----------------------+
| MINUTE(date_created ) |
+----------------------+
| 50 |
+----------------------+ |
号
1 2 3 4 5 6
| mysql > select SECOND(date_created ) from data;
+----------------------+
| SECOND(date_created ) |
+----------------------+
| 31 |
+----------------------+ |
号
您可以使用:
号
或:
1 2 3 4 5
| DATEPART ( day, startdate ) = DATEPART (day, enddate )
AND
DATEPART ( month, startdate ) = DATEPART (month, enddate )
AND
DATEPART ( year, startdate ) = DATEPART (year, enddate ) |
或:
。
使用日期函数的简单和最佳方法
例子
。
或
。
好吧,在"2009-10-20%这样的日期时间"中,使用like-in语句是最好的选择,在这种情况下它应该可以工作