我有一张上个月有记录的表,即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'结构相同的表。我在这里做错了什么?
答案 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)