3

(201208) のような値を持つ列 YearMonth があります。列全体を 2012 年 8 月 (Mon-Year) 形式に変換したいと思います。ここまでやった。

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

このコードは 201208 を 08-2012 に変更しましたが、2012 年 8 月に変更できませんでした。助言がありますか。ありがとう

4

4 に答える 4

4

実際、SQL Server 2012 にはformat関数があります。

SELECT FORMAT(CONVERT(DATE,yearmonth+'01'), N'MMM-yyyy', 'en-US') AS YearMonth;
于 2013-02-18T18:41:32.307 に答える
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, '-')
于 2013-02-18T18:35:31.257 に答える
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

于 2013-02-18T18:40:53.210 に答える
0

select Substring(Convert(VarChar(11),Convert(DateTime,SomeMinthYear) + '01',113),4,8)一通りだろう。たとえば、日付を月 yyyy 形式の書式設定された文字列の 1 つに変換し、それを切り取ります。

于 2013-02-18T18:43:53.853 に答える