我正在尝试将包含2007年12月1日等各个部分的日期转换为SQL Server 2005中的日期时间。我尝试了以下操作:
CAST(DATEPART(year, DATE)+'-'+ DATEPART(month, DATE) +'-'+ DATEPART(day, DATE) AS DATETIME) 但这会导致日期错误。将三个日期值转换为正确的日期时间格式的正确方法是什么?
问题来源于stack overflow
尝试这个:
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));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。