我需要从@ReportDay选择日期
DECLARE @ReportDay DATETIME = '2017-10-02 12:00:03.140'
DECLARE @currentReportDay DATETIME = DATEPART(day, @ReportDay )
但结果我' 1900-01-03 00:00:00.000'。如何解决?
答案 0 :(得分:0)
DECLARE @ReportDay DATETIME = FORMAT(Now(),'YYYY-MM-DD')
DECLARE @currentReportDay DATETIME = DATEPART(day, @ReportDay)
这将以YYYY-MM-DD格式为您提供今天的日期
答案 1 :(得分:0)
DATEPART
会返回一个整数
DECLARE @ReportDay DATETIME = '2017-10-02 12:00:03.140'
DECLARE @currentReportDay INT = DATEPART(day, @ReportDay )
答案 2 :(得分:0)
其他人已经提出了你的问题的含糊之处,但是要添加一些解释并希望澄清一些混乱。
你得到'1900-01-03 00:00:00.000'
的原因是因为DATEPART(day, @ReportDay)
将返回该月中某天的整数,在您的情况下为2
。转换为DATETIME 2时实际上是第3个日期。 0 is 1/1/1900, 1 is 1/2/1900
。等等。
因此,如果您想要DATE
本身,可以使用CONVERT
或CAST
。存在一些其他字符串操作技术,FORMAT()
是其中之一,但它们不值得关注,因为性能会更差,并且无论如何都需要额外的CASTS
和CONVERTS
。你想要做的是 DROP TIME
DATETIME
。最好的方法是CAST
它到DATE
没有TIME
组件。
DECLARE @currentReportDay DATETIME = CAST(CAST(@ReportDay AS DATE) AS DATETIME)
请注意,因为第二个CAST
回到DATETIME
并不是必需的,因为它本身就会发生,因此您可以缩短为:
DECLARE @currentReportDay DATETIME = CAST(@ReportDay AS DATE)
并将此解决。如果您确实想要月中的,那么只需将DATETIME
数据类型更改为INT
。
DECLARE @currentReportDay INT = DATEPART(day, @ReportDay )