Sql 联接表中出错:传递给LEFT或SUBSTRING函数的长度参数无效
我正在从库存快照表捕获库存数据。我已经为snapshot表编写了一个视图,它工作得很好,但是当我将它连接到另一个表时,我得到了传递给LEFT或SUBSTRING函数的error Invalid length参数。我不清楚是什么原因造成的 下面的代码是我为总结快照表而构建的视图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
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?您收到的错误仅与项目的长度有关。