2009-10-01 123 views

回答

5

使用這個:

select CONVERT(nvarchar(50), DATENAME(m, getdate()) 
           + ', ' 
           + DATENAME(yyyy, getdate()) 
      ) 

OUTPUT:

-------------------------------------------------- 
October, 2009 

(1 row(s) affected) 
+0

非常好的答案... – 2009-10-01 13:24:20

+0

如果他想把它放入已經聲明爲nvarchar的變量中,則不需要該轉換器,因爲它會在信息放入變量時隱式轉換。我知道varchar數據沒有隱式轉換的唯一地方就是在SSIS中。 – HLGEM 2009-10-01 14:29:27

0

的一種方式將使用日期名稱來提取名稱格式所需的部分,所以:

select轉換(nvarchar,datename(m,getdate()))+ N','Convert(nvarchar,datename (yy, getdate()))

並用您的日期變量/字段替換getdate()。

+0

將一次轉換爲nvarchar會更高效。也不要忘記,如果你沒有在CONVERT中指定一個nvarchar長度,它默認爲30,並且會截斷。例如運行這個_SELECT CONVERT(nvarchar,'abcdefghijklmnopqrstuvwxyz1234567890')_你只能得到前30個字符,並且不會看到截斷字符:「567890」,並且沒有錯誤或警告。 – 2009-10-01 12:58:18

0

的DATENAME功能將提供您所需要的格式:

DATENAME(m, date) + ', ' + DATENAME(yyyy, date) 

轉換爲特定大小的nvarchar的可以通過轉換函數來完成:

CAST(value AS nvarchar[30]) 
+1

日期部分將僅返回數字,需要日期名稱 – 2009-10-01 12:36:50

+0

日期部分是數字表示形式,不幸的是不是名稱表示形式。 – Andrew 2009-10-01 12:37:38

+0

固定。謝謝。 – 2009-10-01 12:41:48

1

試試這個

DECLARE @DateTime DATETIME 

SET @DateTime = '01 Oct 2009' 

SELECT @DateTime 

SELECT DATENAME(mm, @DateTime) + ', ' + CAST(DATEPART(yy, @DateTime) AS VARCHAR(4)) 
+0

不會返回nvarchar作爲OP請求 – 2009-10-01 12:51:09

+0

然後轉換它,或分配給nvarchar變量... – 2009-10-01 13:23:19

0

嘗試以下查詢:

Select case Convert(int, day(getdate())) when 1 then '1st' when 2 then '2nd' 
when 3 then '3rd' else Convert(varchar, day(getdate()))+'th' end +' '+ Convert(varchar, Datename(m,getdate()))+' ' +Convert(varchar, Datename(yy,getdate())) as Date 

可以更換GETDATE()與任何其他日期。

請檢查是否有幫助。

相關問題