查询以检查不在1个表中工作但在另一个表中工作的重复记录

时间:2018-02-05 16:24:12

标签: sql-server-2012

我有一张上个月有记录的表,即2018年1月。表格格式如下:

D       ||  month  ||  year  ||  No of Sales
Jan-18  ||   01    ||  2018  ||  231

现在,我正在运行查询以查询此记录但是,我没有输出。

SELECT * FROM mytable 
WHERE [year]=left(CONVERT(VARCHAR(8),DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)),112),4) 
AND [month]=left(CONVERT(VARCHAR(8),DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)),1),2)

预期输出为:

D       ||  month  ||  year  ||  No of Sales
Jan-18  ||   01    ||  2018  ||  231

这个查询适用于另一个与'mytable'结构相同的表。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

检查此查询。如果结果不是空的,则表示上个月有记录

select
    *
from
    myTable
where
    eomonth(datefromparts([year], [month], 1)) = eomonth(getdate(), -1)

答案 1 :(得分:0)

您的查询是正确的。我唯一怀疑的是 - 表行中可能有一些不必要的空格,

更好地使用修剪功能

更新现有记录。

尝试

SELECT * FROM mytable WHERE RTrim(LTrim([year]))=left(CONVERT(VARCHAR(8),DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)),112),4) AND RTrim(LTrim([month]))=left(CONVERT(VARCHAR(8),DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)),1),2)