如果一列有开始和结束日期,如何比较日期

时间:2020-02-19 11:11:58

标签: mysql database

该列具有开始日期和结束日期

$.ajax({
    url: url,
    type: 'GET',
    success: function() {
       window.location = url;
 }
});

2018年3月23日是month_name 23 March, 2018 - 23 April, 2018 ,2018年4月23日是start date

如何使用它们来查询开始日期和结束日期?

3 个答案:

答案 0 :(得分:2)

您将需要使用SUBSTRING_INDEX将字符串的一部分返回到连字符的左侧或右侧。但这在性能上会很糟糕。因此,您需要查看数据结构并进行相应的重新设计。开始日期和结束日期应该在带有INDEX和适当的DATATYPE集(DATETIME, TIMESTAMP, DATE)的不同列中。

我建议您在保存到数据库之前通过使用客户端语言正则表达式或拆分/子字符串功能在保存之前将日期正确格式化为MYSQL格式来处理文本。

答案 1 :(得分:1)

set @fromto='23 March, 2018 - 23 April, 2018'; 
select 
  str_to_date(left(@fromto,locate('-',@fromto)-1),'%d %M,%Y') datefrom,
  str_to_date(right(@fromto,length(@fromto)-locate('-',@fromto)),'%d %M,%Y') dateto;

输出:

+------------+------------+
| datefrom   | dateto     |
+------------+------------+
| 2018-03-23 | 2018-04-23 |
+------------+------------+

简短说明:

  1. set @fromto-定义一个变量,该变量用作本示例的输入

  2. locate('-',@ fromto)-这将在@fromto中找到'-'之前的部分的长度,需要-1,因为只需要'-'< / p>

  3. length(@fromto)-locate('-',@ fromto)-这将在'-'

  4. 之后的@fromto中找到零件的长度
  5. str_to_date(...)-请参见STR_TO_DATE

答案 2 :(得分:1)

对于每个需要使用这些日期的查询,您都必须使用这种文本和日期操作取消选择与查询相关的一个或两个日期

SELECT .....
WHERE whatever_else
AND STR_TO_DATE(SUBSTRING_INDEX(monthname, ' -', 1 ), '%d %M,%Y') = '2018-03-23' 
AND STR_TO_DATE(SUBSTRING(monthname, INSTR(monthname, '- ') +2 ), '%d %M,%Y') = '2018-04-23'

简而言之,您的查询将是编写和维护的噩梦,如果将这两个日期保存在2个单独的列中,则您本可以使用的任何索引好处都将丢失。

SUBSTRING_INDEX()

SUBSTRING()

INSTR()

STR_TO_DATE()

相关问题