【问题标题】:SQL Server T-SQL - Convert INT e.g. 201211 value to Nov 2012 during select [duplicate]SQL Server T-SQL - 转换 INT 例如选择期间的 201211 值到 2012 年 11 月 [重复]
【发布时间】:2012-04-09 09:12:34
【问题描述】:

只是想知道是否有人可以帮助我将格式为 YYYYMM 的年/月 INT 列格式化为具有短月份的用户友好日期,例如一月、二月而不是数字。

几个例子:

201101 至 2011 年 1 月
201312 至 2013 年 12 月

不用担心,我可以对组件进行子串化,我只是不知道如何将 01 转为 Jan。

编辑:

根据@Karl 的回答,这就是我想出的——它非常难看,但它有效:

DECLARE @Test INT
SET @Test = 201206

SELECT SUBSTRING(DATENAME(month, DATEADD(month, CAST(SUBSTRING(CAST(@TEST AS VARCHAR), 5, 2) AS INT) - 1 , CAST('2008-01-01' AS datetime))),1,3) + ' ' + SUBSTRING(CAST(@Test AS VARCHAR),1,4) as Test

【问题讨论】:

  • SELECT LEFT(DATENAME(m, [Value] % 100), 3) + STR([Value] / 100, 5)
  • @alex - 抱歉,这不起作用 - SELECT LEFT(DATENAME(m, 201206 % 100), 3) + STR(201206 / 100, 5) 产生 - 2012 年 1 月......它应该2012 年 6 月
  • 对不起,应该是SELECT LEFT(DATENAME(m, DATEADD(m, 201206 % 100, -1)), 3) + STR(201206 / 100, 5)

标签: sql-server-2008 datetime date-formatting


【解决方案1】:

只是另一种方法(转换后删除一天部分):

declare @test int;

set @test=201212

select substring(CONVERT(varchar(11),CONVERT(date, cast (@test * 100 + 1 as varchar(8)), 112),106),4,8)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2018-01-19
    • 2019-01-03
    相关资源
    最近更新 更多