Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将DateTime转换为nvarchar,仅需月份和年份_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 将DateTime转换为nvarchar,仅需月份和年份

Sql server 将DateTime转换为nvarchar,仅需月份和年份,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,如何将datetime值转换为nvarchar并将其格式化为“月,年”,例如2009年10月1日的值应转换为“2009年10月”一种方法是使用datename以名称格式提取所需的片段,因此: 选择Convert(nvarchar,datename(m,getdate())+N','+Convert(nvarchar,datename (yy,getdate()) 并用日期变量/字段替换getdate()。DateName函数将提供所需的格式: DATENAME(m, date) + ', ' +

如何将datetime值转换为nvarchar并将其格式化为“月,年”,例如2009年10月1日的值应转换为“2009年10月”

一种方法是使用datename以名称格式提取所需的片段,因此:

选择Convert(nvarchar,datename(m,getdate())+N','+Convert(nvarchar,datename (yy,getdate())


并用日期变量/字段替换getdate()。

DateName函数将提供所需的格式:

DATENAME(m, date) + ', ' + DATENAME(yyyy, date)
可以通过cast函数转换为特定大小的nvarchar:

CAST(value AS nvarchar[30])
试试这个

DECLARE @DateTime DATETIME

SET @DateTime = '01 Oct 2009'

SELECT @DateTime

SELECT DATENAME(mm, @DateTime) + ', ' + CAST(DATEPART(yy, @DateTime) AS VARCHAR(4))
使用以下命令:

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

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

(1 row(s) affected)

请尝试以下查询:

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()


请检查是否有帮助。

Datepart将只返回数字,需要datenameDatepart是数字表示形式,而不是名称表示形式。不幸的是,您也需要DATENAME()作为年份,就像我的答案一样,否则:Msg 245,级别16,状态1,第1行转换nvarchar值'October,'到数据类型int。不返回nvarchar作为OP请求。一次将所有内容转换为nvarchar将更有效。另外,不要忘记,如果在转换中未指定nvarchar长度,则默认值为30并将截断。例如,运行此SELECT CONVERT(nvarchar,'abcdefghijklmnopqrstuvwxyz1234567890'),您只获得前30个字符,不会看到截断的字符:“567890”,并且没有错误或警告。如果他想将其放入已声明为nvarchar的变量中,不需要转换,因为在将信息放入变量时它将隐式转换。我所知道的varchar数据不隐式转换的唯一地方是SSIS。