2009-10-01 131 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()与任何其他日期。

请检查是否有帮助。

相关问题