- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个表:table1,和四个变量 $START_MONTH
$START_YEAR
$END_MONTH
$END_YEAR
其中返回:月:1,年:2014 和 2015 年 3
+----+-----+-------+------+-------------+
| ID | DAY | MONTH | YEAR | DESCRIPTION |
+----+-----+-------+------+-------------+
| 1 | 1 | 1 | 2014 | Product 1 |
| 2 | 1 | 2 | 2015 | Product 2 |
| 3 | 2 | 3 | 2014 | Product 1 |
| 4 | 10 | 1 | 2015 | Product 3 |
| 5 | 9 | 5 | 2015 | Product 3 |
+----+-----+-------+------+-------------+
SELECT
DATE_FORMAT (CONCAT (DAY,' ', MONTH,' ',YAR), GET_FORMAT(DATE,'EUR')) AS NEW_DATA,
DESCRIPTION
FROM table1
WHERE
NEW_DATA BETWEEN $START_MONTH . $START_YEAR AND $END_MONTH . $END_YEAR
我需要返回1.2014和3.2015之间包含的行。谢谢!
最佳答案
在 MySQL 中,您可以按组合列进行过滤:
SELECT *
FROM table1
WHERE (`YEAR`, `MONTH`) >= (2014,1)
AND (`YEAR`, `MONTH`) <= (2015,3)
http://sqlfiddle.com/#!9/87000/2
更新:正如 Strawberry 所说,MySQL 不会在这种情况下使用索引。但这并不是说不可能——MySQL 只是缺少这种优化。据我所知,PostgreSQL 可以很好地进行这种索引范围检查。所以我们希望MySQL/MariaDB将来能够支持它。
但是,如果您遇到性能问题,您可以为年份范围添加冗余条件:
WHERE (`YEAR`, `MONTH`) >= (2014,1)
AND (`YEAR`, `MONTH`) <= (2015,3)
AND `YEAR` >= 2014
AND `YEAR` <= 2015
这样,MySQL 将首先使用 YEAR, MONTH
或 YEAR, MONTH, DAY
(或任何以 YEAR
开头的索引)。
我知道的所有替代方案可读性都不是很好,而且它们都不能使用索引:
WHERE DATE(CONCAT_WS('-', `YEAR`, `MONTH`, 1)) >= '2014-01-01'
AND DATE(CONCAT_WS('-', `YEAR`, `MONTH`, 1)) <= '2015-03-01'
或者
WHERE (`YEAR` = 2014 AND `MONTH` >= 1)
OR (`YEAR` = 2015 AND `MONTH` >= 3)
OR (`YEAR` > 2014 AND `YEAR` < 2015)
如果您争分夺秒,您还可以创建 indexed generated (virtual) column (MySQL 5.7) :
`DATE` AS STR_TO_DATE(CONCAT_WS('-', `YEAR`, `MONTH`, `DAY`),'%Y-%m-%d') VIRTUAL KEY
查询如下:
WHERE `DATE` >= '2014-01-01'
AND `DATE` < '2015-04-01'
关于date_format 中的 MySQL 串联列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186331/
我在我的数据库中为每个预订使用 unix 时间戳整数存储时间。我遇到了一个问题,我的查询没有正确选择内容,而且似乎休息了一天。 例如,在我的网站上,我有一个日历表,它显示了一个月中的每一天。我使用以下
我在 cakephp 框架中工作, 因为我将日期字符串存储在 varchar 字段中。我需要在需要更改格式之后转换它的时区。这是查询。 SELECT DATE_FORMAT(cast( CONVERT
为什么我的日期比较不起作用, 主要返回所有日期或不返回任何日期 Select DATE_FORMAT(time,'%Y - %m - %d'),'2013 - 01 - 10' FROM signa
我有一张来自 Daloradius 的 table : {CREATE TABLE `radacct` ( `radacctid` bigint(21) NOT NULL AUTO_INCREME
2015 年有 53 周。如果您现在的一周从星期一开始,则为 2016 年 1 月 1 日、2 日和 3 日,也在第 53 周。2016 年 1 月 4 日是第 1 周。 在 MySQL 中,它输出如
我收到了一些时间戳,其格式如下: 2018-02-26T23:59:49Z 我想将此日期插入到日期时间列中。执行以下语句有效 SELECT DATE_FORMAT('2018-02-26T23:59:
我有一个名为“reportinc”的表,我必须在其中提取从 1 或过去几天的 18:01(时间格式为 %H:%i)到今天 18:00 的项目(它是 VARCHAR 字段)。 我尝试过这个查询 SELE
select d.doctorFName,d.doctorLName ,count(ap.appointmentID) totalap, GROUP_CONCAT(DISTINCT s.speci
我正在尝试关注 my_table,其中修改时间的类型为 datetime select DATE_FORMAT(modifiedtime,'%d-%m-%Y') from my_table where
以下 sql 查询的等效 cakephp find 查询是什么? 假设price_date字段类型为日期时间 $sql = "SELECT id,product_id,date_format("%Y-
我有以下输出 2015-05-06 10:30:00 SELECT DATE_FORMAT( NOW( ) , '%Y-%m-%d' ' 10:30:00' ) 我现在想增加日期,以便输出,2015-
2016年的第一周,实际上是2015年的第53周,被mysql转换成2016年的第53周。如何将其转换为实际周,即 2015 年第 53 周? http://www.epochconverter.co
我将 Doctrine2 与 Laravel5 和 MySql 一起使用,并且在 GROUP_CONCAT()、DATE_FORMAT() 方面遇到一些问题。 我通过安装扩展 Beberlei Doc
我相信我是一个熟练的 mysql 用户,但显然我不是。 我以为 mysql 会在比较之前进行转换,但是这个查询让我感到困惑: SELECT DATE_FORMAT('2019-07-19 12:0
我在Mysql中的代码: 从项目中选择 DATE_FORMAT( 创建 , '%Y'); 如何在 CakePHP 中编码? 最佳答案 这里可以使用func()方法。考虑到您将在 Item 模型中编写查
当我尝试使用 DATE_FORMAT(delv_time, '%Y-%m-%d') 它返回 null。 最佳答案 就 MySQL 而言,这还不是日期。这是一个字符串。您需要使用 STR_TO_DATE
我有一个小的 sql 查询,它获取日期时间列的日期部分 Select DATE_FORMAT(`tbldata`.`fldDate`, '%d/%m/%Y') AS formattedDate fro
尝试将时间 ID 和时间本身带回到存储在 mysql 中的列表框中。在 myadmin 中运行 sql 运行良好,在代码中尝试...不太好。带回 undefined index 错误。谢谢。 cal
我试图按日期升序排列日期和时间表,然后按开始时间升序排列,但我的日期列表显示的顺序不正确。不过,开始时间列表似乎确实有效。 顺序应显示为 18/08/2014 然后 19/08/2014 然后 20/
有人可以解释一下 difference between the %h and %I ?两者都被描述为“小时 (01..12)” 并且与秒 %s 和 %S 相同?这背后有什么“奇怪”的功能吗?复制它的原
我是一名优秀的程序员,十分优秀!