簡體   English   中英

C#即使日期在日期范圍內也無法顯示數據

[英]C# Unable to show data even the date is fall within the date range

我正在使用 C# Window 應用程序通過使用 SQL 查詢進行一些檢查從 Microsoft Access 中提取數據。

我有 2 個表要比較並選擇數據。

  • 表 1:USER_OF_RUN 由 StartDate 和 EndDate 組成
  • 表 2:USERINFO,我需要將其與表 1 結合並提取落在 StartDate 和 EndDate 表的日期范圍內的數據。

如果我的表 1 的 StartDate 和 EndDate 設置為 1/1/2016 到 31/12/2017,則所有數據都是正確的。 但是當范圍設置為例如 22/12/2016 到 31/12/2017 並且我想要提取的數據來自日期 3/1/2017 時,該日期介於日期范圍之間,但不知何故數據是空的。

我很好奇是我的 Query 是錯誤的,或者我缺少一些語法。

這是我的 SQL 查詢:

SELECT 
    FORMAT(A.CHECKTIME,'dd/mm/yyyy') AS CHECKTIME,
    A.USERID AS USERID, 
    B.NAME AS NAME, 
    B.BADGENUMBER AS BADGENUMBER, 
    C.NUM_OF_RUN_ID, 
    D.NAME AS DEPT, 
    DEFAULTDEPTID 
FROM ((((CHECKINOUT A ) 
    LEFT JOIN USERINFO B 
        ON A.USERID = B.USERID ) 
    LEFT JOIN USER_OF_RUN C 
        ON A.USERID = C.USERID ) 
    LEFT JOIN NUM_RUN D 
        ON C.NUM_OF_RUN_ID = D.NUM_RUNID ) 
WHERE 
    Format(A.CHECKTIME, 'dd/mm/yyyy') IN (Format('03/01/2017', 'dd/mm/yyyy'), Format(DateAdd('d', 1, Format('03/01/2017', 'dd/mm/yyyy')), 'dd/mm/yyyy')) 
    AND Format('03/01/2017', 'dd/mm/yyyy') BETWEEN Format(C.STARTDATE, 'dd/mm/yyyy') AND Format(C.ENDDATE, 'dd/mm/yyyy') 
    AND DEFAULTDEPTID = 4 
    AND BADGENUMBER = '7092'
ORDER BY A.USERID DESC, CHECKTIME asc 

UNION ALL 

SELECT 
    distinct '', 
    USERID, 
    NAME, 
    BADGENUMBER, 
    '',
    '',
    '' 
FROM USERINFO 
WHERE userid NOT IN 
    (SELECT DISTINCT A.USERID AS USERID 
     FROM ((((CHECKINOUT A) 
         LEFT JOIN USERINFO B 
             ON A.USERID = B.USERID ) 
         LEFT JOIN USER_OF_RUN C 
             ON A.USERID = C.USERID ) 
         LEFT JOIN NUM_RUN D 
             ON C.NUM_OF_RUN_ID = D.NUM_RUNID ) 
     WHERE Format (A.CHECKTIME, 'dd/mm/yyyy') = Format('03/01/2017', 'dd/mm/yyyy') 
         AND Format('03/01/2017', 'dd/mm/yyyy') BETWEEN Format(C.STARTDATE, 'dd/mm/yy') AND Format(C.ENDDATE, 'dd/mm/yyyy')) 
         AND DEFAULTDEPTID = 4 
         AND BADGENUMBER = '7092'

如果你覺得你不能減少查詢來調試它,至少讓日期部分正確:

SELECT 
    A.CHECKTIME,
    A.USERID, 
    B.NAME, 
    B.BADGENUMBER, 
    C.NUM_OF_RUN_ID, 
    D.NAME AS DEPT, 
    DEFAULTDEPTID 
FROM ((((CHECKINOUT A ) 
    LEFT JOIN USERINFO B 
        ON A.USERID = B.USERID ) 
    LEFT JOIN USER_OF_RUN C 
        ON A.USERID = C.USERID ) 
    LEFT JOIN NUM_RUN D 
        ON C.NUM_OF_RUN_ID = D.NUM_RUNID ) 
WHERE 
    A.CHECKTIME = #2017/01/03# 
    AND 
    #2017/01/03# BETWEEN C.STARTDATE AND C.ENDDATE 
    AND 
    DEFAULTDEPTID = 4 
    AND 
    BADGENUMBER = '7092'
ORDER BY A.USERID DESC, A.CHECKTIME ASC

UNION ALL 

SELECT 
    DISTINCT 
    '', 
    USERID, 
    NAME, 
    BADGENUMBER, 
    '',
    '',
    '' 
FROM USERINFO 
WHERE USERID NOT IN 
    (SELECT DISTINCT A.USERID AS USERID 
     FROM ((((CHECKINOUT A) 
         LEFT JOIN USERINFO B 
             ON A.USERID = B.USERID ) 
         LEFT JOIN USER_OF_RUN C 
             ON A.USERID = C.USERID ) 
         LEFT JOIN NUM_RUN D 
             ON C.NUM_OF_RUN_ID = D.NUM_RUNID ) 
     WHERE 
         A.CHECKTIME = #2017/01/03# 
         AND 
         #2017/01/03# BETWEEN C.STARTDATE AND C.ENDDATE 
         AND 
         DEFAULTDEPTID = 4 
         AND 
         BADGENUMBER = '7092'

如果您的日期字段包含時間部分,請將它們包裝在DateValueFix 中

暫無
暫無

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

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