【问题标题】:Declaring date variable声明日期变量
【发布时间】: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.Datefloat;如果是,为什么?
  • 您能粘贴整个查询吗?
  • 那么WHERE dc.Date &gt;= @start_date AND dc.Date &lt; @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


【解决方案1】:

您可能会发现ud.SalesQty 是一个NVARCHAR 列。

ud.SalesQty 的值为NULL 时,您正尝试将quantities 字段设置为0.0(浮点数)。

尝试将0.0 更改为'0.0' 或替代方案。

【讨论】:

  • 如果是这种情况,将COALESCE 替换为ISNULL 将避免错误(因为ISNULL 返回第一个参数的数据类型,而不是使用数据类型优先级)。跨度>
  • 这就提出了一个问题;为什么SalesQtyvarchar,而它显然应该是数字数据类型?
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 2014-09-04
相关资源
最近更新 更多