下面的图像指定了我想要实现的目标。基本上我有两列,需要三个基于这两列的额外计算列。
修改
e.g
产品名称:
博世Rotak 320ER电动旋转割草机
品牌
博世
现在我需要产品名称中的三个子字符串。
首先 - Rotak(品牌名称后面的第一个字)
第二 - Rotak 320ER(品牌名称后面两个字)
第三名 - Rotak 320ER Electric(品牌名下三个字)
我希望能澄清我在寻找的东西。
我目前的尝试如下。但似乎parsename仅适用于有效的sql标识符,所以我不得不放弃这个想法。
select
PARSENAME(temp.tempname, 1),
PARSENAME(temp.tempname, 2),
PARSENAME(temp.tempname, 3),
temp.tempname
from(
select product_name, brand,
replace(substring(product_name,CHARINDEX(brand, product_name) + LEN(brand) + 1, 10000), ' ', '.') as tempname
from Products
where products.product_id = 1298665
) temp
答案 0 :(得分:1)
测试表和数据:
DECLARE @t table(ProductName varchar(200), brand varchar(20))
INSERT @t values('Bosch Rotak 320ER Electric Rotary Lawnmower', 'Bosch')
INSERT @t values('Bosch Rotak 320ER Electric Rotary Lawnmower', 'Rotak')
查询:
;WITH CTE AS
(
SELECT
(row_number() over (order by (select 1))-1) / 3 id,
productname,
brand,
(row_number() over (order by (select 1)) -1)% 3 + 1 position,
substring(x, 0, y.number) substr
FROM @t
CROSS APPLY
(
SELECT stuff(ProductName, 1, charindex(brand, ProductName) + len(brand), '') x
) x
CROSS APPLY
(
SELECT top 3 number FROM master..spt_values
WHERE
type = 'P' and
number > 0 and
substring(x.x, number, 1) = ' '
) y
)
SELECT productname, brand, [1] split1, [2] split2, [3] split3
FROM CTE
PIVOT (max(substr) FOR [position] IN ([1], [2], [3])) AS pvt
结果:
productname brand split1 split2 split3
Bosch Rotak 320ER Electric.. Bosch Rotak Rotak 320ER Rotak 320ER Electric
Bosch Rotak 320ER Electric.. Rotak 320ER 320ER Electric 320ER Electric Rotary
答案 1 :(得分:0)
希望这会对你有所帮助。
DECLARE @str1 VARCHAR(100)
DECLARE @str2 VARCHAR(100)
DECLARE @str3 VARCHAR(100)
DECLARE @some VARCHAR(max)
DECLARE @some1 VARCHAR(max)
DECLARE @some2 VARCHAR(max)
DECLARE @length INT
DECLARE @index INT
--SET @index = 0
SET @some = 'Vijay Dinanath Chauhan'
SET @length = LEN(@some)
SET @index = CHARINDEX(' ',@some,0)
SET @str1 = SUBSTRING(@some,0,@index)
SET @some1 = SUBSTRING(@some,@index,@length)
--SELECT @str1,@index AS [FirstIndex],ltrim(@some1)
SET @index = CHARINDEX(' ',@some1,@index)
SET @str2 = SUBSTRING(@some1,0,@index)
SET @some2 = SUBSTRING(@some1,@index,@length)
--SELECT @str2,@index AS [SecondIndex],ltrim(@some2)
SET @str3 = ltrim(@some2)
SELECT @str1,@str2,@str3*/