我有一个表,其中包含BillDate列,即各个客户的Bill Dates。帐单日期范围为9月1日至9月30日。基于帐单日期,我要获取格式为“ Sep-19”(2019年为19年)的“月份”名称
问题在于,从下个月开始,BillDate将拥有2019年9月和10月的记录。
对于2019年10月,我要获取的帐单月份为“ Oct-19”,因为我将基于10月月份的帐单数据创建报告。
如何根据每月变化的数据获取账单月份?
答案 0 :(得分:1)
一种方法使用format()
:
select format(BillDate, 'MMM-yy')
一个更老式的方法构造字符串:
select left(datename(month, BillDate), 3) + '-' + right(datename(year), BillDate), 2)
答案 1 :(得分:1)
FORMAT
是很糟糕的功能,它非常慢。我强烈推荐CONVERT
和样式代码,以及一些字符串操作。
REPLACE(STUFF(CONVERT(varchar(11),BillDate,106),1,3,''),' ','-')
答案 2 :(得分:0)
您可以尝试以下方法:
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(20), BillDate, 106), 8), ' ', '-')
要获取最新数据,您可以尝试
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(20), BillDate, 106), 8), ' ', '-') AS 'YourColumnName' FROM TableName
ORDER BY BillDate DESC
出于测试目的:-
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 106), 8), ' ', '-') AS 'CurrentDate'
输出:-
CurrentDate
-----------
Oct-2019
答案 3 :(得分:0)
使用格式功能以您的格式转换日期。然后您可以使用where函数获取当月(2019年10月)的结果。
注意:如果您要使用此格式为小数据构建报表查询,则格式小巧好用。但是,如果您使用的是相对较大的数据集,我建议您将其转换为格式会影响性能。
Select *
From
(select your_field1, your_field2, format(BillDate, 'MMM-yy') as Current_Date from your_table) as alias_table
Where [Current_Date] = format(GETDATE(), 'MMM-yy');
在SQL中,您不能在同一查询中使用别名列名称,这就是为什么我在括号中使用子查询来强制SQL处理选择之前的位置。