用DATES查询SQL - 没有提取正确的数据

时间:2016-11-08 20:30:53

标签: sql tsql datetime sql-server-2012

我正在运行一个简单的查询,我试图按日期过滤,就像这样......

SELECT sub.* FROM (
    SELECT
        fp.forum_post_id as forum_post_id, fp.forum_id as forum_id,
        fp.forum_user_id as forum_user_id, fp.forum_title as forum_title,
        fp.forum_edit_date as forum_edit_date,
        fp.forum_timestamp as forum_timestamp, fpr.id as id,
        fpr.fpr_post_id as fpr_post_id, fpr.fpr_id as fpr_id,
        fpr.fpr_user_id as fpr_user_id, fpr.fpr_title as fpr_title,
        fpr.fpr_edit_date as fpr_edit_date,
        fpr.fpr_timestamp as fpr_timestamp,
        GREATEST(fp.forum_timestamp, COALESCE(fpr.fpr_timestamp, '00-00-00 00:00:00')) AS tstamp
        FROM uap4_forum_posts fp
        LEFT JOIN uap4_forum_post_replies fpr
        ON fp.forum_post_id = fpr.fpr_post_id
        WHERE fp.allow = 'TRUE'
) sub
GROUP BY forum_post_id
ORDER BY tstamp DESC

但是我无法看到2016年11月8日的任何结果。我只能在2016年8月11日之前看到一切。

日期在SQL SERVER中保存为smalldatetime。我真的不确定这是否与它有任何关系。

在这种情况下,时间是一个问题吗?

我需要使用as datetime

保存PurchasedOn日期

编辑:

@lamak 在哪里购买了> =' 20161104' AND PurchasedOn< =' 20161108'

2 个答案:

答案 0 :(得分:4)

你需要小心你的条件。通过<= '11/08/2016'使用00:00:00时间,这就是为什么你没有得到结果。使用:

SELECT * 
FROM tblPurchasedProducts
WHERE PurchasedOn >= '20161104' AND PurchasedOn < '20161109';

答案 1 :(得分:0)

SQL中的日期格式为YYYY MM DD,因此您可以编写“2016/04/11”

除非你覆盖它,否则你需要指定日期格式。

尝试:

    Select * from tblPurchasedProducts
    WHERE  PurchasedOn BETWEEN '2016-11-04' AND '2016-11-08'