Sql 联接表中出错:传递给LEFT或SUBSTRING函数的长度参数无效

Sql 联接表中出错:传递给LEFT或SUBSTRING函数的长度参数无效,sql,sql-server,Sql,Sql Server,我正在从库存快照表捕获库存数据。我已经为snapshot表编写了一个视图,它工作得很好,但是当我将它连接到另一个表时,我得到了传递给LEFT或SUBSTRING函数的error Invalid length参数。我不清楚是什么原因造成的 下面的代码是我为总结快照表而构建的视图 Select qty_ordered W_QtyOrdered, qty_shipped WQty_Shipped, on_hand_1 WOnHand, item_no, CASE WHEN Item_no

我正在从库存快照表捕获库存数据。我已经为snapshot表编写了一个视图,它工作得很好,但是当我将它连接到另一个表时,我得到了传递给LEFT或SUBSTRING函数的error Invalid length参数。我不清楚是什么原因造成的

下面的代码是我为总结快照表而构建的视图

Select 
qty_ordered W_QtyOrdered, 
qty_shipped WQty_Shipped, 
on_hand_1 WOnHand, 
item_no, 

CASE 
WHEN Item_no IS NULL THEN 'Z00000'
ELSE LEFT(item_no, LEN(item_no) - 4) 
END AS ItemNo

from westrock.inventory where inventory._modified >= (select 
max(_modified) from westrock.inventory)
正如我提到的,这个查询运行良好

下面的视图是导致错误的原因。如您所见,我正在对现有库存表进行左联接,以获得全局库存视图

select location_id, full_name, locationName, item_id, displayname, 
   LOCATION_ON_HAND_COUNT, LOCATION_ON_ORDER_COUNT, 
   LOCATION_QUANTITYBACKORDERED, 
   LOCATION_AVAILABLE_COUNT, LOCATION_REORDER_POINT 
   , ir.W_QtyOrdered, ir.WQty_Shipped, ir.WOnHand, 
   ir.item_no, ir.ItemNo
    from dw_item_location
   left join westrock.InventoryReport IR on 
      dw_item_location.znumber = IR.ItemNo
  where location_id = 2 or location_id = 3 
您应该处理少于4个字符的项目

Select 
  qty_ordered W_QtyOrdered, 
  qty_shipped WQty_Shipped, 
  on_hand_1 WOnHand, 
  item_no, 

  CASE 
    WHEN Item_no IS NULL THEN 'Z00000'
    WHEN LEN(item_no) <= 4 THEN item_no
    ELSE LEFT(item_no, LEN(item_no) - 4) 
  END AS ItemNo
from westrock.inventory 
where inventory._modified >= (select max(_modified) from westrock.inventory)

什么东西很难得到?如果长度小于4,则会出现错误。因此,将逻辑更改为:

(CASE WHEN Item_no IS NULL THEN 'Z00000'
      WHEN LEN(item_no) <= 4 THEN item_no
      ELSE LEFT(item_no, LEN(item_no) - 4) 
 END) AS ItemNo

也许您的表中有不少于4个字符的项_?LEFTitem_no,LENitem_no-4需要一个长度超过4个字符的item_no。该字段的长度永远不会小于4,除非它为null,我认为这是正确的。我试试这个你确定吗?您是否从westrock.inventory中简单地选择了项目编号,其中项目编号不为空且项目编号小于4?您收到的错误仅与项目的长度有关。