开发者社区> 问答> 正文

使用T-SQL从日期月份和年份中创建日期

我正在尝试将包含2007年12月1日等各个部分的日期转换为SQL Server 2005中的日期时间。我尝试了以下操作:

CAST(DATEPART(year, DATE)+'-'+ DATEPART(month, DATE) +'-'+ DATEPART(day, DATE) AS DATETIME) 但这会导致日期错误。将三个日期值转换为正确的日期时间格式的正确方法是什么?

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 16:24:02 469 0
1 条回答
写回答
取消 提交回答
  • 尝试这个:

    Declare @DayOfMonth TinyInt Set @DayOfMonth = 13 Declare @Month TinyInt Set @Month = 6 Declare @Year Integer Set @Year = 2006


    Select DateAdd(day, @DayOfMonth - 1, DateAdd(month, @Month - 1, DateAdd(Year, @Year-1900, 0))) 它也可以正常工作,并且具有不进行任何字符串转换的优点,因此它是纯算术处理(非常快),并且不依赖于任何日期格式。这利用了SQL Server datetime和smalldatetime值的内部表示为两个的事实。部分值,其第一部分是代表自1900年1月1日以来的天数的整数,第二部分是代表一天(对于时间)的小数部分的十进制小数---所以整数值0(零)总是直接翻译为1900年1月1日午夜...

    或者,由于@brinary的建议,

    Select DateAdd(yy, @Year-1900,
    DateAdd(m, @Month - 1, @DayOfMonth - 1)) 编辑于2014年10月。正如@cade Roux所指出的那样,SQL 2012现在具有内置功能: DATEFROMPARTS(year, month, day) 可以执行相同的操作。

    2016年10月3日编辑,(感谢@bambams注意到这一点,感谢@brinary修复它),@brinary提出的最后一个解决方案。除非先执行年份加法,否则似乎无法在appear年使用

    select dateadd(month, @Month - 1, dateadd(year, @Year-1900, @DayOfMonth - 1));

    2019-11-18 16:24:10
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载