繁体   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