我搜索但找不到我要找的东西,也许我不是在寻找合适的条款。
我有SKU的列和关键字列,SKU的格式为AA 12345,而关键字只是单词的长列表,我需要做的是查找SKU中的数字与任何部分匹配的任何记录关键词,我只是不知道该怎么做。例如,我想删除AA,以便我在关键字值的任何地方寻找%12345%,但我需要为每条记录执行此操作。
我尝试了几种变体:
SELECT *, Code AS C
FROM Prod
WHERE Keywords LIKE '%C%';
但我在所有这些方面都遇到了错误。有人可以帮忙吗?
谢谢。
编辑:好的,对不起,这个问题并不是最清楚的。我会试着澄清一下;SKU列的值在不同数量的前面有2个字母前缀,例如AA 12345或UN 98767865
关键字列充满了信息,但也包含了SKU值,这里的问题是某些关键字列包含具有完全不同记录的产品的SKU值
我正在尝试查找哪些列包含不同记录的值。
我希望这更容易理解。
编辑编辑:这是一些实际的样本数据
Code: AD 56409429
Keywords: 56409429, 409249, AD 56409429, AD-56409429, Advance 56409429, Nilfisk 56409429, Nilfisk Advance 56409429, spx56409429, 56409429M, 56409429G, 56409429H, ADV56409429, KNT56409429, Kent 56409429, AA 12345
Code: AA 12345
Keywords: AA 12345, 12345, Brush
我需要找到错误代码值已经发现它进入关键字的所有记录,例如上面的第一个案例,所以我需要一个只返回第一个例子的查询
我真的很抱歉我的解释令人困惑,这可能是我试图弄清楚如何去做的困难的延伸。想象一下,我和网站所有者一起坐在那里,他们在关键字中添加了数千个这些额外的sku数字,让他们让我删除它们:/
答案 0 :(得分:3)
假设您的所有SKU
值都采用完全相同的格式,您可以使用SUBSTRING
删除'AA'部分,然后在LIKE语句中使用结果:
SELECT * FROM Prod WHERE Keywords LIKE '%' + SUBSTRING(Code, 3,5) + '%'
鉴于您的SKU代码可以是可变长度,上面的SUBSTRING语句必须更改为:
SELECT * FROM Prod WHERE Keywords LIKE '%' + SUBSTRING(Code, 3, LEN(Code)) + '%'
这将删除SKU代码中的前3个字符,无论其后面包含的位数如何。
从您的问题来看,关键字的格式是AA 12345
还是仅12345
还不完全清楚,但假设它们是以逗号分隔的。然后,您可以使用以下语句找到代码在关键字中的所有记录,但也有其他关键字:
SELECT *
FROM Prod
WHERE Keywords LIKE '%' + SUBSTRING(Code, 3, LEN(Code)) + '%'
AND Keywords <> SUBSTRING(Code, 3, LEN(Code))
这句话基本上说找到我所有记录,其中SKU代码在关键字中的某处,但也不能与关键字内容完全匹配,即数据中必须有其他关键字。
根据您的最新修订,我认为这将有效 - 或者至少让您顺利进行(我假设您的Product表具有Id的主键)。此外,这很可能是非常低效的,但看起来好像这是一次性的整理,只要它起作用可能并不重要(至少这是我所希望的)。
SELECT DISTINCT P.Id
FROM PROD P
INNER JOIN
(
-- Get all unique SKU codes from Prod table
SELECT DISTINCT SUBSTRING(CODE, 3, LEN(CODE)) as Code FROM Prod
) C ON P.Keywords LIKE '%' + C.Code + '%'
AND SUBSTRING(P.Code, 3, LEN(P.Code)) <> C.Code
上述语句通过关键字列上的连接将每个匹配记录的唯一SKU代码列表(删除了字母前缀)加入。注意:这将导致返回重复的产品记录。此外,结果集被过滤,以便仅返回匹配记录,其中原始产品记录的SKU代码与关键字列中包含的SKU代码不匹配。 然后,distinct返回仅在关键字列中具有错误SKU代码的产品ID的唯一列表(它们可能具有倍数)。
答案 1 :(得分:0)
Stuff()
似乎更适合......我会这样做:
SELECT *
FROM Prod WHERE
Keywords LIKE '%' + STUFF(SKU,1,3,'') + '%'
这适用于AA 12345
和UN 98767865
- 它会将前3个字符替换为空白。