如何比较日期类型“TEXT”

时间:2017-06-08 04:07:15

标签: php mysql

我需要比较两个日期类型“TEXT”。 我的问题是,我有数据库中存在的日期,而另一个日期不存在。如何进行比较2个日期类型“TEXT”的查询,第一个日期存在,第二个日期不存在。这是我2017年和2016年数据库中的示例数据

This is example date 2017

This is example date 2016

我的查询是SELECT * FROM oec2 WHERE oec_month BETWEEN '$oec_month1' AND '$oec_month2' 注意:$ oec_month1(日期类型TEXT)存在于db中,但$ oec_month2不存在。

如果我使用该查询,则会显示2017年和2016年的结果 The Result

$db = new ezSQL_mysqli(db_user,db_password,db_name,db_host);

$field='date';
$sort='ASC';
if (isset($_GET['search'])){
$branch_id = $db->escape((int)($_GET['branch_id']));
$branch_region = $_GET['branch_region'];    
$oec_month1 = $_GET['oec_month1'];
$oec_month2 = $_GET['oec_month2'];
if(isset($_GET['sorting'])){
    if($_GET['sorting']=='ASC'){$sort='DESC';$dir="down";}
    else {$sort='ASC';$dir="up";}
}
if ($_GET['field']=='result'){$field="result";}
else if ($_GET['field']=='oecgrade'){$field="oecgrade";}
else if ($_GET['field']=='risk'){$field="risk";}



if (!empty($oec_month1)) {
    if (!empty($oec_month2)){$searchquery .= " AND (oec_month BETWEEN '$oec_month1' AND '$oec_month2')";}
    else {$searchquery .= " AND oec_month >= '$oec_month1'";}
} else if (!empty($oec_month2)){$searchquery .= " AND oec_month <= '$oec_month2'";}
if (!empty($branch_id)) {$searchquery .= " AND (branch_id = '$branch_id')";}
if (!empty($branch_region)) {$searchquery .= " AND (branch_region = '$branch_region')";}
$searchquery .= (" order by $field $sort;");
$site_oec = $db->get_results("SELECT * FROM oec2 WHERE 1=1 $searchquery");
$num = $db->num_rows; 

最终输出应该是2017年的唯一数据,因为用户选择“01/2017”和“02/2017”之间的日期,但它给出了2016年的结果。仅供参考:日期“02/2017”是不存在。

1 个答案:

答案 0 :(得分:1)

您可以使用STR_TO_DATE()将TEXT转换为适当的支持日期格式,然后就可以比较日期之间的值。

示例:

如果$oec_month1$oec_month1包含日期格式:

$oec_month1 = "01/2017";
$oec_month2 = "01/2017";

然后,它可能是这样的例子:

SELECT * FROM oec2 WHERE oec_month >= STR_TO_DATE($oec_month1, '%m/%Y') AND oec_month <= STR_TO_DATE($oec_month2, '%m/%Y')

有关日期格式的更多信息,请参阅以下链接: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format