格式功能在 where 子句中不起作用以过滤格式日期?
Format function is not working at where clause to filter the format date?
获取当年和上一年的月份列表
SELECT FORMAT(DATEADD(month,number,CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS varchar(4)) + '-01-01'),'MMM') + '-' +
SUBSTRING(CAST(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + IIF(number<12,-1,0) AS VARCHAR(4)),3,2) as Months into #temptable
FROM master..spt_values
WHERE type = 'P'
AND number < 24
预期输出:-1
From Current Month- Mar-19
Feb-19
End of CurrentYear Month -Jan-19
预期输出:2
Jan-18
to
Dec -18
我正在尝试这个查询
select *from #temptable where Months>=FORMAT(DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0),'MMM-yy') and Months<=FORMAT(DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0),'MMM-yy')
select *from #temptable where Months>=FORMAT(DATEADD(yy, DATEDIFF(yy, 0, getdate())-1, 0),'MMM-yy') and Months<= FORMAT(DATEADD(yy, DATEDIFF(yy, 0, getdate()), -1),'MMM-yy')
由于您实际上是将月/年存储为文本,因此实际将它们与日期进行比较充其量是痛苦的。您最好将实际日期或年/月存储为两个单独的值,也许还带有文本版本以便显示?
无论如何,根据你糟糕的数据模型,你可以这样做来获得你需要的东西:
SELECT * FROM #temptable WHERE YEAR(CONVERT(DATE, '01-' + Months)) = YEAR(GETDATE()) - 1;
SELECT * FROM #temptable WHERE YEAR(CONVERT(DATE, '01-' + Months)) = YEAR(GETDATE()) AND MONTH(CONVERT(DATE, '01-' + Months)) <= MONTH(GETDATE());
但请注意,这现在引入了对区域格式的依赖性,因为这在美国(例如)行不通,因为日复一日。您最好使用 YYYYMMDD 的 ANSI 日期格式(或将日期存储为年/月,或者嘿(!)甚至作为日期)。
获取当年和上一年的月份列表
SELECT FORMAT(DATEADD(month,number,CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS varchar(4)) + '-01-01'),'MMM') + '-' +
SUBSTRING(CAST(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + IIF(number<12,-1,0) AS VARCHAR(4)),3,2) as Months into #temptable
FROM master..spt_values
WHERE type = 'P'
AND number < 24
预期输出:-1
From Current Month- Mar-19
Feb-19
End of CurrentYear Month -Jan-19
预期输出:2
Jan-18
to
Dec -18
我正在尝试这个查询
select *from #temptable where Months>=FORMAT(DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0),'MMM-yy') and Months<=FORMAT(DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0),'MMM-yy')
select *from #temptable where Months>=FORMAT(DATEADD(yy, DATEDIFF(yy, 0, getdate())-1, 0),'MMM-yy') and Months<= FORMAT(DATEADD(yy, DATEDIFF(yy, 0, getdate()), -1),'MMM-yy')
由于您实际上是将月/年存储为文本,因此实际将它们与日期进行比较充其量是痛苦的。您最好将实际日期或年/月存储为两个单独的值,也许还带有文本版本以便显示?
无论如何,根据你糟糕的数据模型,你可以这样做来获得你需要的东西:
SELECT * FROM #temptable WHERE YEAR(CONVERT(DATE, '01-' + Months)) = YEAR(GETDATE()) - 1;
SELECT * FROM #temptable WHERE YEAR(CONVERT(DATE, '01-' + Months)) = YEAR(GETDATE()) AND MONTH(CONVERT(DATE, '01-' + Months)) <= MONTH(GETDATE());
但请注意,这现在引入了对区域格式的依赖性,因为这在美国(例如)行不通,因为日复一日。您最好使用 YYYYMMDD 的 ANSI 日期格式(或将日期存储为年/月,或者嘿(!)甚至作为日期)。