我有一列 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 月。有什么建议么。谢谢
我有一列 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 月。有什么建议么。谢谢
实际上,对于 SQL Server 2012,有格式化函数:
SELECT FORMAT(CONVERT(DATE,yearmonth+'01'), N'MMM-yyyy', 'en-US') AS YearMonth;
对于 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)
或者使用不同的东西 :)
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, '-')
您必须将 08-2012 转换为有效的日期时间,但这可以解决问题。
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-') AS [Mon-YYYY]
select Substring(Convert(VarChar(11),Convert(DateTime,SomeMinthYear) + '01',113),4,8)
将是一种方式。例如,将日期转换为格式为 mon yyyy 的格式化字符串之一,然后将其切掉。