Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 2005 从datetime获取年和月(作为int)_Sql Server 2005_Tsql_Date Format - Fatal编程技术网

Sql server 2005 从datetime获取年和月(作为int)

Sql server 2005 从datetime获取年和月(作为int),sql-server-2005,tsql,date-format,Sql Server 2005,Tsql,Date Format,我创建了一个视图,需要将datetime转换为以下格式: 2011 06 (year, empty-space, two digit numeric month) 格式化它的最佳方式是什么 以下是日期时间(在视图的子查询中,“四舍五入”为月份): 这给了我年、月和日(当然是因为datetime四舍五入到月的第一天): 提前谢谢你试试这个: SELECT LTRIM(STR(YEAR(Claim_Submitted_Date))) + ' ' + RIGHT('0'+ LTRI

我创建了一个视图,需要将datetime转换为以下格式:

2011 06   (year, empty-space, two digit numeric month)
格式化它的最佳方式是什么

以下是日期时间(在视图的子查询中,“四舍五入”为月份):

这给了我年、月和日(当然是因为datetime四舍五入到月的第一天):

提前谢谢你

试试这个:

SELECT LTRIM(STR(YEAR(Claim_Submitted_Date))) + ' ' +
       RIGHT('0'+ LTRIM(STR(MONTH(Claim_Submitted_Date))), 2)
FROM MyTable
试试这个:

SELECT LTRIM(STR(YEAR(Claim_Submitted_Date))) + ' ' +
       RIGHT('0'+ LTRIM(STR(MONTH(Claim_Submitted_Date))), 2)
FROM MyTable
怎么样

STUFF(STUFF('YYYY 0M', 1, 4, YEAR(Claim_Submitted_Date)), 8 - LEN(MONTH(Claim_Submitted_Date)), 2, MONTH(Claim_Submitted_Date))

怎么样

STUFF(STUFF('YYYY 0M', 1, 4, YEAR(Claim_Submitted_Date)), 8 - LEN(MONTH(Claim_Submitted_Date)), 2, MONTH(Claim_Submitted_Date))

对Tim Schmelter的答复:

您可以比较以下方法:

declare @i int = 0
declare @dummy varchar(20)
while @i < 1000000
begin
--set @dummy = stuff(convert(varchar(6), getdate() + @i / 1000, 112), 5,0,' ') 
set @dummy = REPLACE(CONVERT(VARCHAR(7), getdate() + @i / 1000, 121), '-', ' ') 
set @i = @i + 1
end
声明@i int=0
声明@dummy varchar(20)
而@i<1000000
开始
--set@dummy=stuff(convert(varchar(6),getdate()+@i/1000112),5,0',)
set@dummy=REPLACE(CONVERT(VARCHAR(7),getdate()+@i/1000121),'-','')
设置@i=@i+1
终止
在我的服务器上,我的版本需要1秒,另一个版本需要3秒

对Tim Schmelter的答复:

您可以比较以下方法:

declare @i int = 0
declare @dummy varchar(20)
while @i < 1000000
begin
--set @dummy = stuff(convert(varchar(6), getdate() + @i / 1000, 112), 5,0,' ') 
set @dummy = REPLACE(CONVERT(VARCHAR(7), getdate() + @i / 1000, 121), '-', ' ') 
set @i = @i + 1
end
声明@i int=0
声明@dummy varchar(20)
而@i<1000000
开始
--set@dummy=stuff(convert(varchar(6),getdate()+@i/1000112),5,0',)
set@dummy=REPLACE(CONVERT(VARCHAR(7),getdate()+@i/1000121),'-','')
设置@i=@i+1
终止

在我的服务器上,我的版本需要1秒,另一个版本需要3秒,这两种方法都有效,第一种我更喜欢t-clausen的方法。两种方法都有效,第一种我更喜欢t-clausen的方法。同样有效。我不确定你的方法还是p.campbell的方法更好。效果也不错。我不确定你的方法还是p.campbell的方法更好。效果很好,但我接受了t-clausen的方法,因为它不那么冗长。谢谢。效果很好,但我接受了t-clausen的方法,因为它没有那么冗长。非常感谢。
declare @i int = 0
declare @dummy varchar(20)
while @i < 1000000
begin
--set @dummy = stuff(convert(varchar(6), getdate() + @i / 1000, 112), 5,0,' ') 
set @dummy = REPLACE(CONVERT(VARCHAR(7), getdate() + @i / 1000, 121), '-', ' ') 
set @i = @i + 1
end