如何通过分别提取日期和小时来加入两个表?

时间:2015-07-14 09:10:13

标签: sql-server-2012

select 
    s.RollNumber, s.[Payment Date], s.Amount, h.HourKey, d.Year 
from 
    [Accounts].[dbo].StudentFeesDetails s
inner join  
    [ABCU_DWH].[dbo].DimHourOFTheDay h on h.HourKey = DATEPART(Hour, s.[Payment Date])
inner join 
    [ABCU_DWH].[dbo].DimDates d on d.[Full Date] = s.[Payment Date]  
where 
    RollNumber = 5

s.[Payment Date]Datetime数据类型的列。查询不会产生任何结果。通过注释一个连接语句,查询将生成结果。那么这段代码中的问题是什么?

2 个答案:

答案 0 :(得分:2)

如果s.[Payment Date]是日期时间值,它也有一个时间组件,并且您没有收到任何数据的原因可能是时间部分与{{{ 1}}(我假设是约会)。

尝试将其投射到某个日期:

[Full Date]

如果inner join [ABCU_DWH].[dbo].DimDates d on d.[Full Date] = cast(s.[Payment Date] as date) 是一个日期时间,您可能还需要强制转换,以便最终只比较日期部分:

[Full Date]

答案 1 :(得分:1)

您似乎在尝试将日期时间与第二次加入中的日期进行比较 尝试改变:

inner join [ABCU_DWH].[dbo].DimDates d
on d.[Full Date] = s.[Payment Date]  

到下一个:

inner join [ABCU_DWH].[dbo].DimDates d
on CAST(d.[Full Date] AS DATE) = CAST(s.[Payment Date] AS DATE)