具有转换的datediff - 显示昨天的行 - 不返回任何行

时间:2017-09-29 00:19:03

标签: sql-server datediff

有人可以告诉我这里缺少什么吗?我认为我的代码看起来很漂亮,直到我为昨天的结果运行最后两行。列在那里,但它们是空的。如果我使用已注释的日期行,则数据会完美显示。这让我觉得错误是在选择转换语句中...但我已经尝试过每一件事。

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)

2 个答案:

答案 0 :(得分:0)

根据连接/服务器语言设置AND t.doc_date between '05/09/2017' and '05/10/2017'可能意味着:

  • doc_date 2017年9月5日至2017年10月5日,'DD/MM/YYYY'格式。
  • doc_date介于2017年5月9日至2017年5月10日期间,'MM/DD/YYYY'格式。

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

答案 1 :(得分:0)

从您的查询中,

- 在'05 / 09/2017'和'05 / 10/2017'之间的时间和日期 以上是获得1个月的数据。

以下代码是获取昨天的数据   AND t.doc_date&gt; = dateadd(day,datediff(day,1,GETDATE()),0)
  AND t.doc_date&lt; DATEADD(日,DATEDIFF(日,0,GETDATE()),0)

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