我在一列中保存多个日期在数据库分开用逗号(,)像如何将当前日期与MySQL中的日期范围或离散日期值进行比较?
- 2017年3月5日,2017年3月6日,2017年3月7日,2017年3月8日,2017年-03-08。
- 2017年3月5日,2017年3月8日
我只是想知道我如何通过这些日期比较当前日期。在第一个例子中,它很容易,但问题在于第二个。
任何人都可以帮我.... ....?
谢谢...
我在一列中保存多个日期在数据库分开用逗号(,)像如何将当前日期与MySQL中的日期范围或离散日期值进行比较?
我只是想知道我如何通过这些日期比较当前日期。在第一个例子中,它很容易,但问题在于第二个。
任何人都可以帮我.... ....?
谢谢...
,如果我,我肯定会用find_in_set()
和substring_index()
,有这样一个糟糕的数据结构:
select t.*
from t
where find_in_set(date_format(curdate(), '%Y-%m-%d'), datecol) > 0 or
(datecol like '%,%' and datecol not like '%,%,%' and
date_format(curdate(), '%Y-%m-%d') between substring_index(datecol, ',', 1) and substring_index(datecol, ',', -1)
);
您可以使用
FIND_IN_SET
与逗号比较CURRENT_DATE
分离 日期
SELECT FIND_IN_SET(CURRENT_DATE,'2017-03-05,2017-03-06,2017-03-07,2017-03-08,2017-03-08');
编辑
MySQL的FIND_IN_SET()返回的位置如果字符串在字符串列表中存在(作为子字符串),那么对于第二个字符串它简单地返回的Zero
,所以你可以做一些事情像下面
SELECT * from tbl where FIND_IN_SET(CURRENT_DATE,'2017-03-05,2017-03-08')>0
<?php
$string_date='2017-03-05,2017-03-06,2017-03-07,2017-03-08,2017-03-08';
$tmp_dates=explode(',',$string_date);
foreach($tmp_dates as $tmp_date)
{
$newDateString = date_format(date_create_from_format('Y-m-d', $tmp_date), 'Y-m-d');
$interval =date_diff(date_create($newDateString),date_create(date('Y-m-d')));
echo $interval->format('%R%a days');
echo '<br>';
}
?>
SELECT * FROM your_table
WHERE FIND_IN_SET('2017-03-08',comma_date);
正如其他人评论说,这将是最好标准化数据和存储个别日期在链接表的多行中而不是在单个字段中。不过,假设有一个有效的原因,这不能做,下面会做你问:
SELECT date_csv,
CASE WHEN CHAR_LENGTH(REPLACE(date_csv, ',', '')) = CHAR_LENGTH(date_csv) - 1
THEN /* date_csv has a single comma */
CURRENT_DATE >= SUBSTRING(date_csv, 1, INSTR(date_csv, ',') - 1)
AND CURRENT_DATE <= SUBSTRING(date_csv, INSTR(date_csv, ',') + 1)
ELSE /* date_csv has either no comma or multiple commas */
FIND_IN_SET(DATE_FORMAT(CURRENT_DATE,'%Y-%m-%d'), date_csv) > 0
END AS 'Test result'
Rextester演示:http://rextester.com/EPKO65812
好的...感谢您的帮助 – GYaN
在您的答案船上! –
不要保存CSV在列http://stackoverflow.com/questions/41304945/best-type-of-indexing-when-there-is-like-clause/41305027#41305027 http:// stackoverflow。 com/questions/41215624/sql-table-with-list-entry-vs-sql-table-with-a-row-for-each-entry/41215681#41215681 – e4c5
这不是你应该如何存储你的数据。规范化表格。 http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad我也不清楚如何示例1很容易,但2不是.. – chris85
你需要做什么确切的比较? –