簡體   English   中英

如何在SQL中正確使用帶有日期的條件?

[英]How use correctly a condition with dates in sql?

我有這個查詢:

SELECT
    t1.usu_id,
    t2.usu_nombre,
    t2.usu_apellido
FROM
    act_regisdiario t1
INNER JOIN
    act_usuario t2
ON
    (t2.usu_id = t1.usu_id)
WHERE
     t1.rdi_fechacti != '2016-06-02 00:00:00' 
 AND t2.usu_admin = 0
GROUP BY 
    t2.usu_id

該查詢可以處理2個表:

act_regisdiario:

在此處輸入圖片說明

和act_usuarios:

在此處輸入圖片說明

因此,我希望您選擇具有不同rdi_fechacti的用戶。 在這種情況下是:2016-06-02 00:00:00

但這向我展示了所有usu_nombre ,但只有Jean有2016-06-02 00:00:00

我只需要讓Jean

對不起,我的英語。

所有用戶至少有一行符合您的條件。

而是使用not exists

SELECT u.*
FROM act_usuario u
WHERE NOT EXISTS (SELECT 1
                  FROM act_regisdiario r
                  WHERE u.usu_id = r.usu_id AND
                        r.rdi_fechacti = '2016-06-02 00:00:00'
                 )
      u.usu_admin = 0;

請注意,您也不需要為此進行匯總。

您的查詢要查詢的是沒有該日期時間的任何內容,這將嘗試與該日期時間的記錄進行JOIN操作,並且僅接受“失敗”的記錄:

SELECT DISTINCT
t2.usu_id,
t2.usu_nombre,
t2.usu_apellido
FROM act_usuario t2
LEFT JOIN act_regisdiario t1
ON (t2.usu_id = t1.usu_id AND t1.rdi_fechacti = '2016-06-02 00:00:00')
WHERE t1.rdi_fechacti IS NULL and t2.usu_admin = 0
ORDER BY t2.usu_id
;

將您的WHERE子句更改為此:

WHERE t1.rdi_fechacti < '2016-06-02 00:00:00' OR t1.rdi_fechacti > '2016-06-02 23:59:59'
    and t2.usu_admin = 0

這表示排除任何帶有t1.rdi_fechacti == '2016-06-02 00:00:00' ,並且不需要對起始代碼進行重大更改。 您應該能夠只更新DATETIME的日期部分,以搜索排除窗口中可能存在的其他任何內容。

我希望這有幫助。

-C§

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM