繁体   English   中英

将YearMonth格式设置为荷兰月名

[英]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

如果YearMonthint类型,则可以使用以下sql语句:

SELECT FORMAT(DATEFROMPARTS(201710 / 100, 201710 % 100, 1), 'MMM', 'nl-NL')

结果是: okt

TODO将201710更改为YearMonth

说明

  • DATEFROMPARTS采用3个参数YearMonthDay 第一个参数除以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM