我正在尝试使用PARSENAME
来分隔一列,它为某些行返回空值。以下是示例数据。
CREATE TABLE Table1
(
[sku] varchar(50),
[nameslist] varchar(max)
);
INSERT INTO Table1 ([sku], [nameslist])
VALUES ('1', '1991|1994|Freightliner|FLD112'),
('2', '1983|1993|Chevrolet|S10 Blazer'),
('3', '1993|1993|Freightliner|FLC112|FLC11264S'),
('4', '1987|1987|GMC|S15|Base|EL|Gypsy|High Sierra|Sierra Classic');
WITH CTE AS
(
SELECT
sku, nameslist,
LEN(nameslist) - LEN(REPLACE(nameslist, '|', '')) N
FROM
Table1
)
SELECT
sku, nameslist,
PARSENAME(REPLACE(nameslist, '|', '.'), N + 1) AS year1,
PARSENAME(REPLACE(nameslist, '|', '.'), N) AS year2,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 1) AS make,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 2) AS model,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 3) AS submo,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 4) AS submo2,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 5) AS submo3,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 6) AS futureuse1,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 7) AS futureuse2,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 8) AS futureuse3,
PARSENAME(REPLACE(nameslist, '|', '.'), N - 9) AS futureuse4,
PARSENAME(REPLACE(nameslist, '|', '.'), N + 10) AS futureuse5
FROM
CTE;
DROP TABLE table1;
sku 1和2显示了正确的结果。Sku 3和4未显示任何值(始终为空)。请协助。
https://stackoverflow.com/questions/50671299
复制相似问题