2013-02-18 68 views
3

我有一个像YearMonth(201208)这样的列。我想将整列转换为2012年8月(Mon-Year)格式。我做到了这一点。如何把yyyymm转换成Mon-yyyy?

select Convert(varchar(11),Cast(right(yearmonth,2)+'-'+left(yearmonth,4) as varchar (11)),0) 
from report.TEST 

该代码将201208更改为08-2012,但之后我无法将其更改为2012年8月。有什么建议么。由于

+1

这将很大程度上取决于您正在使用的RDBMS。所以,请告诉我们一个是(和版本)。 – Lamak 2013-02-18 18:24:56

+0

嗨拉马克,我一直在使用Microsoft SQL Server 2012 - 11.0.2100.60(X64) 谢谢 – poshak 2013-02-18 18:34:41

回答

1

对于MS-SQL

DECLARE @d1 INT; SET @d1 = 201208 
DECLARE @d2 VARCHAR(6); SET @d2 = 201208 


SELECT 'data type'='int' 
, 'in'[email protected] 
, 'out'=CONVERT(VARCHAR(3), CAST(LEFT(@d1,6)+'01' AS DATE), 107) 
    + '-' + LEFT(@d1,4) 

SELECT 'data type'='varchar' 
, 'in'[email protected] 
, 'out'=CONVERT(VARCHAR(3), CAST(@d2+'01' AS DATE), 107) 
    + '-' +LEFT(@d2,4) 


/* -- OUTPUT 
data type in  out 
int   201208 Aug-2012 

data type in  out 
varchar  201208 Aug-2012 
*/ 

您也可以使用DATENAME

SELECT 'data type' = 'int' 
, 'in' = @d1 
, 'out' = LEFT(DATENAME(month, CAST(LEFT(@d1,6)+'01' AS DATE)), 3) 
    + '-' + LEFT(@d1,4) 

SELECT 'data type' = 'varchar' 
, 'in' = @d2 
, 'out' = LEFT(DATENAME(month, CAST(@d2+'01' AS DATE)), 3) 
    + '-' + LEFT(@d2,4) 

,或者使用不同的STUFF :)

DECLARE @d1 INT; SET @d1 = 201208 
DECLARE @d2 VARCHAR(6); SET @d2 = 201208 


SELECT 'data type' = 'int' 
, 'in' = @d1 
, 'out' = STUFF(CONVERT(VARCHAR(20), CAST(LEFT(@d1,6)+'01' AS DATE), 107), 4, 5, '-') 

SELECT 'data type' = 'varchar' 
, 'in' = @d2 
, 'out' = STUFF(CONVERT(VARCHAR(20), CAST(@d2+'01' AS DATE), 107), 4, 5, '-') 
+0

谢谢Leoinfo的建议。我很感激。 – poshak 2013-02-18 18:44:41

+0

一个愚蠢的问题。如果你不介意,可否请你解释'01'。对不起,我也在学习。谢谢 – poshak 2013-02-18 18:59:41

+0

那么,当你投票到201208日期,你会得到“2020年12月08日”。所以,如果你添加“01”你CAST 20120801到“2012年8月1日” – leoinfo 2013-02-18 19:08:06

4

实际上,对于SQL Server 2012中,有format功能:

SELECT FORMAT(CONVERT(DATE,yearmonth+'01'), N'MMM-yyyy', 'en-US') AS YearMonth; 
+2

+1对于“更好的新方式”。我只是希望MS不会等待这么长时间来添加它: -/ – 2013-02-18 18:42:38

+0

@pst它已经是时间已经 – Lamak 2013-02-18 18:43:42

+0

@DavidB你是对的,更新我的答案,谢谢 – Lamak 2013-02-18 18:49:51

0

select Substring(Convert(VarChar(11),Convert(DateTime,SomeMinthYear) + '01',113),4,8)将是一种方式。 例如将日期转换为格式化字符串中的一个,格式为mon yyyy,然后将其切出。