我对SQL相当陌生,并从这个论坛中学到了很多东西。谢谢大家!
还有一个我需要专家咨询的东西。
我有一栏,基本上是财政期。但是,它不是日期列,而是类型varchar
。
目的是操纵列值以从中获取会计月份的名称。
因此在下面的示例中,我有Fiscal_Period
列可用,并且我需要FiscalMonth
列。
Fiscal_Period FiscalMonth
----------------------------
2018001 Jan
2018002 Feb
2018003 Mar
2018004 Apr
2018005 May
2018006 Jun
2018007 Jul
2018008 Aug
2018009 Sep
2018010 Oct
2018011 Nov
2018012 Dec
是否有一种简单的方法可以实现这一目标?
我当前的黑客方法是:
Fiscal_Period
列转换为YYYY-DD-MM
格式Datetime
转换为日期,然后从中提取月份Month
和Datename
函数我的查询:
SELECT
DATENAME(MONTH, (CONVERT(DATETIME, (CONCAT(SUBSTRING(FISCAL_PERIOD, 1, 4), '-', SUBSTRING(FISCAL_PERIOD, 6, LEN(FISCAL_PERIOD)), '-', '11'))))) AS PeriodName
FROM
table 1
干杯!
答案 0 :(得分:2)
这有点短
input
如果只希望使用缩写的月份名称,则在上面的表达式上使用LEFT()
答案 1 :(得分:2)
由于您只需要一个月份名称,因此年份或日期都不需要更改,因此可以为它们使用常量。在T-SQL中,可以安全地将等于YYYYMMDD的文字用作日期,因此:
sudo apt install ca-certificates-java
sudo update-ca-certificates -f
答案 2 :(得分:0)
这基本上是已经给出的答案,只是想出id完成输入即可。它依赖于使用给定的日期格式填写问题,但其他方面的工作原理相同。
;with src (dt) as
(
select convert(date, '20180101', 120) union all
select '20180201' union all
select '20180301' union all
select '20180401' union all
select '20180501' union all
select '20180601' union all
select '20180701' union all
select '20180801' union all
select '20180901' union all
select '20181001' union all
select '20181101' union all
select '20181201'
)
select
Dt,
left(datename(month, dt), 3)
from src