[英]Format YearMonth to dutch monthname
我有以下YearMonth数据:
201601
201602
201603
Etcetera。
我需要将它们转换为荷兰月份名称,格式为“ 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.
我究竟做错了什么 ?
如果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
extrester演示: http ://rextester.com/NPPN83037
返回:
+-----------+
| monthname |
+-----------+
| jan |
| feb |
| mrt |
+-----------+
如果yearmonth
是字符类型:
select format(
convert(date,yearmonth+'01')
,'MMM','nl-NL') as monthname
from v
如果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 |
-------------
该错误是因为FORMAT的第一个参数不接受字符串。 使用RIGHT函数将结果隐式转换为字符串。
您可以将RIGHT的输出转换回数字,但是如果仅使用数学运算,则语句的效果会更好。 201710%100将只返回10的余数。
注意,在多行中使用FORMAT命令可能会非常慢。 更改会话的语言并使用其他日期函数(例如DATENAME)会获得更好的性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.