我需要一些帮助来搞清楚和SQL语句。
我知道我想要的东西我不能表达它。
我使用的是php,因此它不需要排他性的SQL,它可以充当过滤器。
伪代码
$query="SELECT * FROM MyTable WHERE 'TIS' is not older than 2 days or empty = ''$ORDER"; }
我表中列的名称中的TIS是以这种格式03-12-09
(d,m,y)存储日期。
$ORDER
用于根据其他字段(而非日期)的值对值进行排序。
我正在看
SELECT *
FROM orders
WHERE day_of_order >
(SELECT DATEADD(day,-30, (SELECT MAX(day_of_order) FROM orders)) AS "-30 Days");
但我不认为即时通讯就是这样。
由于
答案 0 :(得分:3)
尝试以下方法:
SELECT *
FROM MyTable
WHERE COALESCE(TIS, SYSDATE) > SYSDATE - INTERVAL '2' DAY
$ORDER
我不知道你正在使用什么数据库 - 上面使用了Oracle处理时间间隔的方法。如果您正在使用SQL Server,则应关闭以下内容:
SELECT *
FROM MyTable
WHERE COALESCE(TIS, GETDATE()) > DATEADD(Day, -2, GETDATE())
$ORDER
在MySQL中试试这个:
SELECT *
FROM MyTable
WHERE COALESCE(TIS, NOW()) > DATE_SUB(NOW(), INTERVAL 2 DAYS)
$ORDER
我希望这会有所帮助。
答案 1 :(得分:0)
所以,我在这一切中都很失落。
它是如何解决的:
_秒在vincebowdren的评论中,“强烈”建议我将该字段的数据类型更改为Date
,确实我没有,这是一个字符串。
对于我来说,在具有String值的字段上尝试使用日期的SQL操作非常愚蠢。
所以我只是RTFM:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
和:
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
然后继续将字段值更改为日期。
这是我完美的查询:
$query="SELECT * FROM MyTable WHERE DATE_SUB(CURDATE(),INTERVAL 2 DAY) <= TIS OR TIS = 0000-00-00 $ORDER "; }
我要感谢海报的帮助。