2017-02-17 149 views
-1

为了简化,数据库中的每条记录都有公司名称,总支出和住宿预留。保留的Nights以字符串的形式存储,然后在该过程中进行解析。 例如:Customer = “Bob的加热” Total = 3000 Reserved = “1/2/2017,1/3/2017,1 /二千○一十七分之五...”如何返回日期小于特定日期的数组中的日期

我需要写选择所有记录的查询其保留开始于特定日期或之前,因此如果目标日期为“2017/4/4”,则Bob Heating的记录将返回。 ROW_ID(INT),the_date(DATE)

2:

任何帮助,将不胜感激, 吉姆

+2

'“存储在一个字符串的形式,然后在后面的过程解析”' - 好像“在后面的过程”将是当你作出比较呢。你必须比较日期,而不是当他们是字符串。 (将日期存储为日期而不是字符串会使事情变得更容易。) – David

+0

并将每个日期存储在与其相关的表中的自己的行中。正如你可以看到你没有简化,但让你的工作更复杂。 – AbraCadaver

+0

您能否提供示例代码,以便我们能够为您提供帮助? –

回答

0

1)在你的数据库名为 “reservation_dates” 具有列创建新表。 )在PHP中运行一个脚本,将所有这些日期移动到另一个将其存储为DATE数据类型的表中。

例PHP脚本:

$statement = "SELECT * FROM my_table"; 
$result = mysqli_query($con, $statement) or die(mysqli_error($con)); 
while ($row = mysqli_fetch_assoc($result)) 
    { 
    $dates = explode(",", $row['Reserved']); 
    foreach($dates as $date) 
     { 
     mysqli_query($con, "INSERT INTO reservation_dates (row_id, the_date) VALUES ('".$row['id']."', '$date')") or die(mysqli_error($con)); 
     } 
    } 

运行PHP脚本。现在,您将在名为reservation_dates的关系表中创建所有日期。

下,选择全部落在2017年1月4日,该行的,运行一个查询,如

SELECT customer.* FROM reservation_dates reservation JOIN my_table customer ON customer.id = reservation.row_id WHERE MAX(reservation.the_date) >= '2017-04-01' AND MIN(reservation.the_date) <= '2017-04-01' GROUP BY row_id 

我很快就打字,而又没有实际尝试的代码,但是这是一般的方法我会采取。希望能帮助到你!

0
select * 
from dbo.March2010 A 
where A.Date <= Convert(datetime, '2010-04-01')