根据表格中的各个日期获取月份名称

时间:2019-10-25 12:02:39

标签: sql sql-server

我有一个表,其中包含BillDate列,即各个客户的Bill Dates。帐单日期范围为9月1日至9月30日。基于帐单日期,我要获取格式为“ Sep-19”(2019年为19年)的“月份”名称

问题在于,从下个月开始,BillDate将拥有2019年9月和10月的记录。

对于2019年10月,我要获取的帐单月份为“ Oct-19”,因为我将基于10月月份的帐单数据创建报告。

如何根据每月变化的数据获取账单月份?

4 个答案:

答案 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处理选择之前的位置。