首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期减日期查询

日期减日期查询
EN

Stack Overflow用户
提问于 2014-09-27 01:58:33
回答 2查看 81关注 0票数 1

我有一个如下所示的查询,我想计算end_scan-packing_date列,我如何实现这一点?

代码语言:javascript
复制
 SELECT a.invoice_no,
       CONVERT(VARCHAR, b.packing_date,3) as packing_date ,
       CONVERT(VARCHAR, b.exw_date,3) as exw,
       CONVERT(VARCHAR, b.bcd_end_date, 3) as end_date,
       (SELECT TOP 1 insert_date FROM   wms.bcd_shipment d,wms.shinvoicedetails WHERE d.invoice_no = a.invoice_no ORDER  BY insert_date ASC) as start_date ,
       (SELECT TOP 1 insert_date FROM   wms.bcd_shipment d,wms.shinvoicedetails WHERE d.invoice_no = a.invoice_no ORDER  BY insert_date DESC) as end_scan,
       CONVERT(VARCHAR, send_date, 3) as swnd_date,customer_short_name,
       Sum(picking_qty) as qty,total_carton
FROM   wms.shinvoicedetails a,
       wms.shinvoiceheder b,
       wms.shinvoice_ctrl c
WHERE  send_date BETWEEN '2014/8/26 00:00:01' AND '2014/9/25 23:59:59'
       AND a.invoice_no = b.invoice_no
       AND a.invoice_no = c.invoice_no
GROUP  BY a.invoice_no,
          b.packing_date,
          b.exw_date,
          b.bcd_end_date,
          send_date,
          customer_short_name,
          total_carton
ORDER  BY 1;  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-27 05:24:28

请参阅DATEDIFF函数的文档(假设您使用Server作为关系数据库管理系统)。

它有3个参数,我假设您希望在几天内有差异。所以你想读的东西是这样的:

代码语言:javascript
复制
DATEDIFF(DAY,
         (SELECT TOP 1 insert_date
          FROM   wms.bcd_shipment d,
                 wms.shinvoicedetails
          WHERE  d.invoice_no = a.invoice_no
          ORDER  BY insert_date DESC),
          b.packing_date
) AS diff_days

但是,您的查询在许多级别上都是错误的。您正在对几乎所有列进行分组以获得和,同时应该将其写入导出表 (子查询),只在必要的字段上分组。另外,您正在转换到VARCHAR,这可能转换为VARCHAR(1)。您可能应该将它写成转换(VARCHAR(10),,3)。

票数 1
EN

Stack Overflow用户

发布于 2014-09-27 07:51:06

一天不会从00:00:01开始,也不会以23:59:59结束。帮你自己一个忙,不要试图把你的需求转化为between的语法。有一种更简单、更可靠的方法

代码语言:javascript
复制
WHERE  send_date >= '20140826' AND send_date < '20140926'

不到26号;它更准确&没有愚蠢的一秒扣减。

使用日期和时间范围的最佳做法是避免并始终使用以下形式: 其中>= '20120101‘和col < '20120201’ 此表单适用于所有类型和所有精度,无论时间部分是否适用。 伊齐克本甘

http://sqlmag.com/t-sql/t-sql-best-practices-part-2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26070553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档