MySQL表EMPLOYEE具有所有类型为int的列(beginyear,beginmonth,beginday,empid)。
返回等于或大于日期2009/8/13的所有行的正确查询是什么?那是年,月,日。
这样的查询是不正确的,因为它不会返回包含日期的行,例如2009/9/1(在下面的where子句中由beginday> = 13过滤掉)或2010/1/14。
SELECT * FROM EMPLOYEE where beginyear >= 2009 and beginmonth >= 8 and beginday >=13
假设我无法对架构进行任何更改,并且必须从JDBC创建某种查询才能获得结果。
对于您在三个不同领域的糟糕状况,我能做的最好的事情:
select *, concat(beginyear, '-',beginmonth,'-',beingday) as full_date FROM TABLE WHERE CONCAT(beginyear, '-',beginmonth,'-',beingday) >= '2009-08-13'
MySql的datetime表达式概念很特殊,您可能想用date()函数对concat进行包装以对其进行规范化。
date()