我预先为基本(可能很愚蠢)的问题道歉。
我正在执行SELECT查询,其中我要联接多个表。我有一个表,其中包含与某些日子相关的数值。我想在输出中提供的是今天附带的数字值,但是对于如何实现此目标我一无所知。显然,我的输出中的每条记录都具有相同的值,我对此表示满意。
这甚至可能吗?如果是这样,代码示例将是什么?
我希望从中获得数值的表在第一列中有日期([Calendar_Day]),而在另一列中有整数([X_Value])。 在下面,您可以看到我的SELECT语句的最后三行。这次最新尝试产生了NULL。
,[EnterpriseDB].[pcc].[conditions].Internal
,GETDATE() AS Date_Today
,(SELECT [X_Value] FROM [Analytics].[WorkArea].[Days_Vals] WHERE [Calendar_Day] = GETDATE()) AS BizVal_Today
答案 0 :(得分:0)
只是猜测:
[Calendar_Day]
的类型为date
。 getdate()
返回datetime
。这意味着DBMS将[Calendar_Day]
转换为datetime
,其时间为00:00:00.0,以便能够比较操作数。但是getdate()
包括当前时间。因此,除非您正好在00:00:00.0执行查询,否则值将不匹配,并且子查询返回null。
要解决此问题,请低调getdate()
。
... WHERE [Calendar_Day] = convert(date, getdate()) ...
如果[Calendar_Day]
也是datetime
,但您不想比较它的小时(分钟,分钟,秒...)部分,则也将其向下转换。
... WHERE convert(date, [Calendar_Day]) = convert(date, getdate()) ...
如果[Calendar_Day]
上有索引,则可能会将所有索引从窗口中抛出。您可能需要考虑将数据类型更改为date
或使用持久的索引计算列,并与之进行比较(如果这会导致任何性能问题)。