1

这是我迄今为止尝试过的:

select CAST(
    DATEPART(month,getDate())+'-'+
    DATEPART(day,getDate())+'-'+
    2012
    as datetime)

我以日期结束:1905-08-02 00:00:00.0。我期待得到今天的约会。我重新排列了顺序,它似乎没有改变。谁能提供为什么它给我这个?作为记录,我计划在今年使用 2012 年以外的其他值。提前致谢。

4

3 回答 3

0

此代码将起作用,您需要确保连接相同的数据类型并使用特定日期时间格式的转换:

            SELECT CONVERT(DATETIME,
                    CAST(DATEPART(month,getDate()) AS NVARCHAR(50))
                    +'-'+CAST(DATEPART(day,getDate()) AS NVARCHAR(50))
                    +'-2012'
                    ,121) 
于 2012-10-18T10:05:09.870 回答
0
select CAST ('2012'+
             CAST(DATEPART(month,getDate()) as char(2))+
             CAST(DATEPART(day,getDate()) as char(2))
            as datetime)

您必须连接字符串。您的代码将数字2039转换为 date

如果这个小练习的目标是能够改变给定日期的年份,你可以这样做。

declare @NewYear int = 2003

-- with time part
select dateadd(year, @NewYear - year(getdate()), getdate())

-- time part removed
select dateadd(year, @NewYear - year(getdate()), dateadd(day, 0, datediff(day, 0, getdate())))
于 2012-10-17T14:01:13.890 回答
0

CAST()每件首先作为varchar:

select 
  cast(
    cast(DATEPART(month,getDate()) as varchar(2))+'-'+
    cast(DATEPART(day,getDate()) as varchar(2))+'-'+
    '2012' as datetime)
于 2012-10-17T14:01:43.970 回答