2017-09-29 138 views
0

有人可以告訴我我在這裏失蹤了嗎?我認爲我的代碼看起來很美,直到我爲昨天的結果運行最後2行。列在那裏,但它們是空的。如果我使用分配的日期行,數據顯示完美。這讓我覺得錯誤是在選擇轉換語句...但我已經嘗試了每一件事情。datediff with convert - 顯示昨天的行 - 不返回行

SELECT RTRIM(r.acct_no) as acct_no, CONVERT(varchar,t.doc_date,101)as doc_date, t.doc_amt, 
    LEFT(t.batch_no,4) as batch_no  
FROM ESUTRANH t 
INNER JOIN ESUTRAND d on t.tran_id = d.tran_id 
INNER JOIN ESUACCTR r on d.acct_id = r.acct_id 
INNER JOIN ESUCUSTJ j on r.acct_id = j.acct_id 
WHERE (t.batch_no is null or LEN(t.batch_no) > 1) 
--AND t.doc_date between '05/09/2017' and '05/10/2017' 
    AND t.doc_date >= dateadd(day,datediff(day,1,GETDATE()),0) 
    AND t.doc_date < dateadd(day,datediff(day,0,GETDATE()),0) 
+0

您的查詢顯示邏輯上正確。因此,請驗證您是否應該包含行 - 不要假設。嘗試: 從ESUTRANH中選擇top 10 *其中doc_date SMor

回答

0

根據連接/服務器語言設置AND t.doc_date between '05/09/2017' and '05/10/2017'可能意味着:

  • 之間doc_date 05日至2017年5 - 10 - 2017年,'DD/MM/YYYY'格式。
  • doc_date在2017年5月9日至2017年5月10日之間,'MM/DD/YYYY'格式。

最好使用不依賴於語言配置的日期格式,如'YYYYMMDD',例如AND t.doc_date between '20170509' and '20170510'

0

從查詢,

--and '05/09/2017' 年和'05/10/2017' 年
之間t.doc_date上述行1個月獲取數據。

下面的代碼獲取昨天的數據。
AND t.doc_date> = dateadd(day,datediff(day,1,GETDATE()),0)
AND t.doc_date < dateadd(day,datediff(day,0,GETDATE()),0)

你能否請你檢查你的表是否有昨天的數據。