我需要比较两个日期类型“TEXT”。 我的问题是,我有数据库中存在的日期,而另一个日期不存在。如何进行比较2个日期类型“TEXT”的查询,第一个日期存在,第二个日期不存在。这是我2017年和2016年数据库中的示例数据
我的查询是SELECT * FROM oec2 WHERE oec_month BETWEEN '$oec_month1' AND '$oec_month2'
注意:$ oec_month1(日期类型TEXT)存在于db中,但$ oec_month2不存在。
$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”是不存在。
答案 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