Sql server 转换从字符串转换为日期时间失败

Sql server 转换从字符串转换为日期时间失败,sql-server,sql-server-2005,datetime,Sql Server,Sql Server 2005,Datetime,我尝试了下面的示例函数。。。我尝试了许多其他的方法,但仍然得到了错误,因为“从字符串转换日期时间时转换失败”。。我所尝试的就是从这个函数返回一个Datetime,但在这里的某个地方它仍然是字符串 请告知 declare @V_Year nvarchar (4), @Test datetime , @t1 as datetime , @t2 as datetime declare @Mon varchar(5) , @dayz varchar (5) , @GMTStart varchar(

我尝试了下面的示例函数。。。我尝试了许多其他的方法,但仍然得到了错误,因为“从字符串转换日期时间时转换失败”。。我所尝试的就是从这个函数返回一个Datetime,但在这里的某个地方它仍然是字符串

请告知

declare  @V_Year nvarchar (4), @Test datetime , @t1 as datetime  , @t2 as datetime 
declare @Mon varchar(5) , @dayz varchar (5) , @GMTStart varchar(20)
set @Mon = '03' 
set @t1  = cast ( @Mon as datetime)
set @dayz = '01'
set @t2  = cast ( @dayz as datetime)
SELECT @V_Year =  DATEPART(year, getdate())
set @GMTStart  = @Mon + '-' + @dayz + '-' + convert(nvarchar,@V_Year)
set @Test = Cast(@GMTStart as datetime)
select @Test

我对您的代码做了一些更改:

declare  
    @V_Year nvarchar (4), 
    @Test datetime , 
    @t1 as datetime , 
    @t2 as datetime 
declare 
    @Mon varchar(8), --here need to be varchar(8) because datetime has 8 digits
    @dayz varchar(5), 
    @GMTStart varchar(20)
set @Mon = '20130101' --here you must provide full date, not a part, because is not possible to convert just part of date into full date
set @t1  = cast (@Mon as datetime) --this will work with 
--set @dayz = '01'
--set @t2  = cast (@dayz as datetime) --this line not work with just day, must provide full date

SET @V_Year =  DATEPART(year, getdate()) --here first set a variable, and then select
SELECT @V_Year
set @GMTStart  = @Mon + '-' + @dayz + '-' + convert(nvarchar, @V_Year)
set @Test = Cast(@GMTStart as datetime)
select @Test

您的代码正在创建当前年份的datetime值3月3日

日期字符串的解释取决于
set dateformat
,除非使用格式
yyyymmdd

从代码中删除所有似乎没有任何用处的东西会给您留下这样的结果

select cast(cast(year(getdate()) as char(4))+'0301' as datetime)
可能重复的