【发布时间】:2019-05-15 09:27:53
【问题描述】:
我想使用以下声明开始和结束日期:
DECLARE @start_date DATETIME = '2019-05-08'
DECLARE @end_date DATETIME = '2019-05-14'
然后在WHERE 子句中使用它,如下所示:
WHERE dc.Date >= @start_date AND dc.Date < @end_date
但是,我收到以下错误:
将数据类型 varchar 转换为 float 时出错。 (8114) (SQLExecDirectW)
谁能帮我理解这个错误?
非常感谢!
编辑
请注意以下工作:
WHERE dc.Date >= '2019-05-08' AND dc.Date < '2019-05-14'
编辑
完整的查询是:
DECLARE @unit_id INT = {unit_id}
DECLARE @location_id INT = {location_id}
DECLARE @start_date DATETIME = '{start_date}'
DECLARE @end_date DATETIME = '{end_date}'
SELECT dc.Date AS timestamps, COALESCE(ud.SalesQty, 0.0) AS quantities
FROM DIM.DayCalendar AS dc WITH (NOLOCK)
LEFT JOIN FACT.UnitData AS ud
ON dc.DayCalendarID = ud.DayCalendarID
AND ud.UnitID = @unit_id
AND ud.LocationID = @location_id
WHERE dc.Date >= @start_date AND dc.Date < @end_date
ORDER BY timestamps DESC
【问题讨论】:
-
听起来你的专栏
dc.Date是float;如果是,为什么? -
您能粘贴整个查询吗?
-
那么
WHERE dc.Date >= @start_date AND dc.Date < @end_date不会导致错误;它来自其他地方。如果dc.Date的值类似于2019-05-13 00:00:00,那么它要么是smalldatetime,要么是datetime2(0),而datetime既不是varchar,也不是float。这意味着错误不在我们拥有的 sn-p 中。 -
我认为您应该标记您使用的编程语言。
DECLARE @unit_id INT = {unit_id}不是有效的 T-SQL。 -
你能把你的表的 DDL 也贴出来吗?
标签: sql-server date declare