我正在创建一个新的SQL表,它将有一个日期列,它只包含Month和Year(例如:2014年11月)。我担心的是我需要在查询中匹配此列来进行JOIN。该查询的相关摘录如下所示:
(
SELECT
ReservationStayID,
datename(m,StayDate) + ' ' + cast(datepart(yyyy,StayDate) as varchar) as [MTH],
count(*) AS [Nights Spent],
avg(RateAmount) as [Rate],
min(CreatedOn) as CreatedOn,
min(StayDate) as [DateOfArrival],
max(StayDate) as [DateOfDeparture]
FROM ReservationStayDate
GROUP BY ReservationStayID, datename(m,StayDate) + ' ' + cast(datepart(yyyy,StayDate) as varchar)
) x ON x.ReservationStayID = b.ReservationStayID
我的新表的日期列将与上面查询的第3行的输出匹配(即datename(m,StayDate ..... as [MTH])
我只是想在我的新表中把它弄好,这样我以后在做JOINS等时就不会搞砸了。
我读过我可以使用smalldate,或将Month和Year拆分为2列中的Varchar。那么,你会推荐什么?
答案 0 :(得分:1)
我建议您使用一个日期时间列
答案 1 :(得分:0)
如果您确定永远不会使用整个日期,那么您应该使用两个单独的字段进行月份和年份,但是您必须将这些值拆分为连接的两侧,否则将无法使用此路径: month name
将是varchar / nvarchar列,但year
应该是一个整数,因为它始终是一个数字。
两个单独列的优点之一是您不必在每个连接处进行数学运算,因此您必须将这些值与连接的两侧分开。
我的意思是你还必须修改表ReservationStayDate
的结构,将月份和年份添加为sparate值;最简单的解决方案是创建两个calculated columns。
如果你可以使用持久计算列,你也可以在这些列上有索引,这可能会提高加入时的性能。搜索。
我看到的优势:如果您需要(并且仅使用)“月份”和“年份”信息,将“日期”信息翻译成整个“月份”和“年份”的地方既麻烦又昂贵应用。您可以创建类,辅助方法等,但如果将“干净”信息存储在数据库中,则更容易在所有级别上使用和维护它。