SQL比较2个日期,并在表中显示如果>3天

问题描述 投票:0回答:1

在我的表中,我有一对夫妇的日期字段,当我运行我的查询,我想比较的重新安排日期(frsdt)对到期日期(frdte),只有显示记录,如果他们是> 3天。我拉我的头发了几天,想我会达到的帮助。任何帮助将被感激。

SELECT fprod
    ,pord
    ,desc
    ,CASE 
    WHEN ftype = 'P' 
      THEN 'Planned' 
    ELSE 'Firm' 
    END
    ,vndnam
    ,fppvnd
    ,fqty
    ,DATE(TO_DATE(RTRIM(CHAR(fdate))
    ,DATE(TO_DATE(RTRIM(CHAR(frdte))
    ,DATE(TO_DATE(RTRIM(CHAR(frsdt))
    ,pecst * pqord
FROM avm
    ,kfp
    ,iiml01
    ,hpo 
INTO 
    :tblPAM.colItmNbr
    ,:tblPAM.colPONbr
    ,:tblPAM.colDesc
    ,:tblPAM.colType
    ,:tblPAM.colVendor
    ,:tblPAM.colVendorId
    ,:tblPAM.colQty
    ,:tblPAM.colRelDate
    ,:tblPAM.colDueDate
    ,:tblPAM.colRescDate
    ,:tblPAM.colPOAmount 
WHERE vendor = fppvnd 
    AND fprod = iprod 
    AND year(frsdt) < 9999 
    AND pldte > pddte + 3 days
    AND month(frsdt)|| '/' || day(frsdt) || '/' || year(frsdt) > month(frdte)|| '/' || day(frdte)  || '/' || year(frdte) 

enter image description here

查询重写建议从

SELECT T.*
FROM
(
SELECT fprod
    ,pord
    ,desc
    ,CASE 
    WHEN ftype = 'P' 
      THEN 'Planned' 
    ELSE 'Firm' 
    END some_alias1
    ,vndnam
    ,fppvnd
    ,fqty
    ,DATE(TO_DATE(RTRIM(CHAR(fdate)) fdate_alias
    ,DATE(TO_DATE(RTRIM(CHAR(frdte)) frdte_alias
    ,DATE(TO_DATE(RTRIM(CHAR(frsdt)) frsdt_alias
    ,pecst * pqord some_alias2
FROM avm
    ,kfp
    ,iiml01
    ,hpo 
WHERE vendor = fppvnd 
    AND fprod = iprod
) T 
WHERE year(frsdt_alias) < 9999 
  AND pldte_alias > pddte_alias + 3 days
  AND frsdt_alias > frdte_alias;
sql db2
1个回答
1
投票

下面是一个非常基本的例子,说明如何将数字日期表示法转换为日期,以及如何在日期上进行基本的数学运算。考虑 MYTAB "虚拟 "表在这里作为你的表,包含2个数字列。按原样运行。

SELECT *
FROM 
(
  SELECT
    DATE(TO_DATE(RTRIM(CHAR(D1)), 'YYYYMMDD')) DAT1
  , DATE(TO_DATE(RTRIM(CHAR(D2)), 'YYYYMMDD')) DAT2
  FROM
  (
  VALUES 
    (20181004, 20181007)
  , (20181004, 20181017)
  ) MYTAB (D1, D2)
) T
WHERE DAT2 > DAT1 + 3 DAY;

结果是。

|DAT1        |DAT2        |
|------------|------------|
|2018-10-04  |2018-10-17  |

0
投票

你可以用日期算术来解决这个问题。

例如,在SQL Server中,它看起来像这样。

WHERE dateadd(day,3, frsdt) >= frdte

在DB2中是这样的

WHERE frsdt + 3 DAYS >= frdte

在这里,我在第一个日期上加3天。 如果它大于目标日期,那么我就知道它们相隔不到3天。

如果我想知道日期是否相隔大于3天,我会用这个方法来代替

WHERE dateadd(day,3, frsdt) < frdte

添加日期的功能会根据你所使用的平台而改变--但基本的思路是按照我上面所展示的。 在日期上添加3天,然后在WHERE语句中进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.