如何连接数字以创建自定义日期?

时间:2012-10-17 13:56:37

标签: sql-server-2005

这是我到目前为止所尝试的内容:

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

我最终得到的日期是:1905-08-02 00:00:00.0。我期待今天的约会。我重新排列了顺序,似乎没有改变。任何人都可以提供为什么它给我这个?为了记录,我计划使用2012年以外的其他值。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

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

你必须连接字符串。 Your code is casting the number 2039 to 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())))

答案 1 :(得分:0)

CAST()每件作为varchar优先:

select 
  cast(
    cast(DATEPART(month,getDate()) as varchar(2))+'-'+
    cast(DATEPART(day,getDate()) as varchar(2))+'-'+
    '2012' as datetime)

答案 2 :(得分:0)

此代码可以使用,您需要确保连接相同的数据类型并使用具有特定DateTime格式的转换:

            SELECT CONVERT(DATETIME,
                    CAST(DATEPART(month,getDate()) AS NVARCHAR(50))
                    +'-'+CAST(DATEPART(day,getDate()) AS NVARCHAR(50))
                    +'-2012'
                    ,121)