2017-02-21 75 views
0

我有一个MySQL列设置以下MySQL的SELECT查询字符串分割搜索值

日期范围= 2017年2月27日 - 2017年2月29日

现在我想

SELECT * FROM leaves WHERE daterange (>= firstvalue && <= secondvalue) 

这可能吗?将每个值分开,因为它们被保存为一个字符串?否则,我想我必须在插入表之前拆分日期范围。

+0

哪些数据类型是daterange,firstvalue和secondvalue? – scaisEdge

+0

@Chad。 。 。在将日期范围插入表格之前拆分日期范围。不要制造混乱。 –

回答

1

假设日期范围,firstvalue和secondvalue是合适的日期(日期时间)数据类型可以使用

之间
SELECT * 
FROM leaves 
WHERE daterange BETWEEN firstvalue AND secondvalue 

如果一些值involed不是最新的数据类型,但VARCHAR你应该使用STR_TO_DATE适当的转换或

+0

谢谢,不过firstvalue和secondvalue值不存在,只有daterange确实存在,并且它实际上存储为“02/27/2017 - 02/29/2017”varchar类型。猜猜这不可能吧? – Robert

+0

所以你应该在两个适当的部分分割字符串.. .. obatin两个不同的值..? 。 – scaisEdge

0

首先,修复你的数据结构。这里有事情是错误的保存像是范围:

  • 日期应存放在本机格式(datedatetime),而不是字符串。
  • 列应该有一个值。
  • 必须对列执行字符串操作通常会阻止使用索引。

也就是说,有时候你会被其他人的设计决定困住。所以,如果你完全无法修复数据结构,那么有一个解决方法。您可以将范围转换为您需要的值:

where $date >= str_to_date(left(daterange, 10), '%m-%d-%Y') and 
     $date <= str_to_date(right(daterange, 10), '%m-%d-%Y') 
+0

谢谢!我同意,数据结构是完全混乱的,我试图修改别人的项目。我会放弃这一点。 – Robert