我有一张表格,用于续订一个人购买的政策。
我的想法是,应该检查要更新的项目的到期日期 从续订表格中反映新的购买日期。
我试过这个:
$check="SELECT * FROM transactions WHERE Expiry_Date > '$_POST[newDate]' and Policy_Number = '$_POST[Policy_Number]' ";
但它没有做正确的检查。
相反,例如,如果到期日是“2015-23-9”且新日期是“2015-22-9”,它仍然接受不应该的数据,但如果新日期是例如“2014- 22-19“然后它会给出我正在寻找的派生结果。
如何使用新日期对项目(policy_number)及其到期日期进行检查,以查看该项目是否真的已过期而不是我的sql语句?
答案 0 :(得分:1)
您似乎正在使用这样的格式来存储日期:YYYY-DD-M看起来它们以这种方式存储在您的列中并以这种方式呈现给查询中的DBMS。
以这种方式存储的日期不会整理 - 相互比较 - 正确。
在SQL中尝试这个
WHERE STR_TO_DATE(Expiry_Date, '%Y-%d-%m') >
STR_TO_DATE('$_POST[newDate]' , '%Y-%d-%m')
格式化字符串'%Y-%d-%m'
告诉STR_TO_DATE()
您的字符串是YYYY-DD-M格式。如果你给这个函数一个虚假的日期,如2014-22-19
,它将返回NULL,所以要小心。
这会将您的输入和列值转换为DATE
字段,与您期望的方式进行比较。
更好的是,如果可以,请切换到使用日期的YYYY-MM-DD字符串格式,以及使用列中的DATE
数据类型。你会喜欢这样的,因为你可以通过索引加快速度。