我有一列需要解析并插入到新表中。我非常接近获取我需要的数据,但我似乎无法得到正确的语法。下面是数据的我需要解析的格式为:从列解析值并插入到T-Sql的新表中
装箱单#195,UID = PKG-15094-195
装箱单#112,UID = PKG-41251-241
我刚需要装箱单号码。当然并不总是2个字符。
看起来相对简单,只是得到字符[#]和[,]的索引号的差异,然后从[#] + 1的索引开始,长度为[,] - [#] - 1 。这是额外的扣除是搞砸我的句法:
SELECT substring(IMG_FILE_DESCRIPTION,
CHARINDEX('#', IMG_FILE_DESCRIPTION) + 1,
CHARINDEX(',', IMG_FILE_DESCRIPTION) - CHARINDEX('#', IMG_FILE_DESCRIPTION)
)
AS PKL
FROM MASTER_SCAN_IMAGE
where IMG_SCT_PKEY = '21'
这样的作品,但给我一个太多。如果我尝试添加另一个减法一样,所以我得到一个语法错误:
SELECT substring(IMG_FILE_DESCRIPTION,
CHARINDEX('#', IMG_FILE_DESCRIPTION) + 1,
(CHARINDEX(',', IMG_FILE_DESCRIPTION) - CHARINDEX('#', IMG_FILE_DESCRIPTION)) -1
)
AS PKL
FROM MASTER_SCAN_IMAGE
where IMG_SCT_PKEY = '21'
Msg 537, Level 16, State 2, Line 1 Invalid length parameter passed to the LEFT or SUBSTRING function.
所以我想我应该包长度值到一个单一的变量,但它也创造了语法错误:
SELECT *
FROM MASTER_SCAN_IMAGE
DECLARE @length int = CHARINDEX(',', IMG_FILE_DESCRIPTION) - CHARINDEX('#', IMG_FILE_DESCRIPTION);
Msg 207, Level 16, State 1, Line 3
Invalid column name 'IMG_FILE_DESCRIPTION'.
Msg 207, Level 16, State 1, Line 3
Invalid column name 'IMG_FILE_DESCRIPTION'.
事实上,我似乎无法使用CHARINDEX分配变量,我总是以相同的“无效列名”错误结束。
DECLARE @length bigint = CHARINDEX(',', IMG_FILE_DESCRIPTION);
Msg 207, Level 16, State 1, Line 3
Invalid column name 'IMG_FILE_DESCRIPTION'.
无论我使用int还是bigint,它们都是charindex可以发送的两种返回类型,这是一样的。
感谢您的快速回复。我糟糕地表达了我的查询,并没有显示我正在处理的全部列数据。我刚刚编辑了我的问题以反映我的数据。 不幸的是我不能使用替换,因为数据的末尾将总是有不同的数字。 –
@BrianGe好的,我根据您添加的新信息更新了我的解决方案。检查一下,并使用链接尝试。 – TheEsnSiavashi