从约会

时间:2017-10-02 19:34:53

标签: sql sql-server

我需要从@ReportDay选择日期

DECLARE @ReportDay DATETIME = '2017-10-02 12:00:03.140' 
DECLARE @currentReportDay DATETIME = DATEPART(day, @ReportDay ) 

但结果我' 1900-01-03 00:00:00.000'。如何解决?

3 个答案:

答案 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本身,可以使用CONVERTCAST。存在一些其他字符串操作技术,FORMAT()是其中之一,但它们不值得关注,因为性能会更差,并且无论如何都需要额外的CASTSCONVERTS。你想要做的是 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 )