我有以下YearMonth数据:
201601
201602
201603
等等。
我需要将它们转换为荷兰月份名称,格式为“MMM”
所以201601应该成为'jan' 201602应该成为'feb'
等
我有以下代码:
SELECT FORMAT(RIGHT(YearMonth,2),'MMM', 'nl-NL') as monthname
我收到此错误:
Argument data type varchar is invalid for argument 1 of format function.
我做错了什么?
答案 0 :(得分:0)
如果yearmonth
是整数,那么您可以先将其转换为date
然后再使用format()
:
create table t (yearmonth int)
insert into t values (201601),(201602),(201603)
select format(
convert(date,convert(varchar(10),yearmonth*100+1))
,'MMM','nl-NL') as monthname
from t
rextester演示:http://rextester.com/NPPN83037
返回:
+-----------+
| monthname |
+-----------+
| jan |
| feb |
| mrt |
+-----------+
如果yearmonth
是字符类型:
select format(
convert(date,yearmonth+'01')
,'MMM','nl-NL') as monthname
from v
答案 1 :(得分:0)
如果YearMonth
的类型为int
,那么您可以使用以下sql语句:
SELECT FORMAT(DATEFROMPARTS(201710 / 100, 201710 % 100, 1), 'MMM', 'nl-NL')
,结果是:okt
TODO将201710更改为
YearMonth
Year
,Month
,Day
。第一个参数的计算方法是除以100:201710 / 100 = 2017 (int / int = int)
。第二个参数使用模运算符计算:201710 % 100 = 10
CREATE TABLE #tempDates (YearMont int)
INSERT INTO #tempDates VALUES(201710)
INSERT INTO #tempDates VALUES(201711)
INSERT INTO #tempDates VALUES(201712)
INSERT INTO #tempDates VALUES(201801)
SELECT FORMAT(DATEFROMPARTS(YearMont / 100, YearMont % 100, 1), 'MMM', 'nl-NL') monthname FROM #tempDates
-------------
| monthname |
|-----------|
| okt |
| nov |
| dec |
| jan |
-------------
答案 2 :(得分:0)
错误是因为FORMAT不接受第一个参数的字符串。使用RIGHT函数隐式地将结果转换为字符串。
您可以将RIGHT的输出转换回一个数字,但如果仅使用数学运算,则语句的效果会更好。 201710%100将仅返回10的剩余部分。
请注意,在跨多行使用时,FORMAT命令可能会非常慢。您可以更好地更改会话语言并使用其他日期功能(如DATENAME)。