如何将yyyymm转换成Mon-yyyy?

时间:2013-02-18 18:23:06

标签: sql sql-server date format sql-server-2012

我有一个名为YearMonth的列,其值为(201208)。我想将整个列转换为2012年8月(周一)格式。我做到了这一点。

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

此代码已将201208更改为08-2012,但之后我无法将其更改为2012年8月。有什么建议。感谢

4 个答案:

答案 0 :(得分:4)

实际上,对于SQL Server 2012,有format函数:

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

答案 1 :(得分:1)

对于MS-SQL

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


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

SELECT 'data type'='varchar'
, 'in'=@d2
, '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, '-')

答案 2 :(得分:0)

你必须将08-2012变成一个有效的日期时间,但这样才能解决问题。

SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-') AS [Mon-YYYY]

来源:http://www.sql-server-helper.com/tips/date-formats.aspx

答案 3 :(得分:0)

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