[英]C# Unable to show data even the date is fall within the date range
我正在使用 C# Window 應用程序通過使用 SQL 查詢進行一些檢查從 Microsoft Access 中提取數據。
我有 2 個表要比較並選擇數據。
如果我的表 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'
如果您的日期字段包含時間部分,請將它們包裝在DateValue或Fix 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.