2017-09-29 134 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)

你能否请你检查你的表是否有昨天的数据。