我在一个表中有四列。该表列出了每箱的包装数量。四列是- ID PerCase 内箱 每包
我要查询并创建2列ID并压缩 冷凝的色谱柱应为“ perCase / InnerCarton / PerPack” 有许多ID,其中InnerCarton为null,所以我希望压缩列显示“ PerCase / PerPack”
我尝试过-
SELECT ID,
CAST(IIf([Items_UOM].[InnerCase] Is Not Null
,[Items_UOM].[PerCase] & '/' & [Items_UOM].[InnerCase] & '/' & [Items_UOM].[PerPack]
,[Items_UOM].[PerCase] & '/' & [Items_UOM].[PerPack]) AS varchar(25))
FROM Items_UOM;
我收到一条错误消息-将varchar值'/'转换为数据类型smallint时转换失败。
答案 0 :(得分:0)
&
是二进制和运算符,不是字符串串联运算符。
如果设置了CONCAT_NULL_YIELDS_NULL,则可以使用+
将值与斜杠连接起来,并使用concat()
来构建整个字符串。与+
一样,如果一个操作数为null,则串联得到NULL
,对于NULL
来说,斜杠被消除了。 concat()
会用空字符串替换NULL
,因此如果有NULL
个值,则总结果不会是NULL
。
如果值是整数,则需要在+
中使用它们之前将它们转换为字符串,否则+
被解释为算术加号,并导致引擎尝试将其转换为整数。 '/'
到一个数字,当然会失败。
SELECT id,
concat(convert(varchar(max), items_uom.innercase) + '/',
convert(varchar(max), items_uom.percase) + '/',
convert(varchar(max), items_uom.perpack)
FROM items_uom;
答案 1 :(得分:0)
这里发生的几件事不太正确。首先,要组合字符串,请使用+而不是&。其次,您存在数据类型转换问题,因为您的列是tinyint,并且如果不进行显式转换就不能添加要添加的字符。您还可以通过使用ISNULL或COALESCE而不是IIF并被迫重复逻辑来简化此过程。
这应该对您有用。
SELECT ID,
convert(varchar(25), [Items_UOM].[PerCase]) + ISNULL('/' + [Items_UOM].[InnerCase], '') + '/' + convert(varchar(25), [Items_UOM].[PerPack])
FROM Items_UOM;