親SKUを持つ入力テーブル、つまりBOO3
とその子スキーマBOO3L,BOO3S,BOO3M
があります。これはこれまでの私のコードで、私はここで立ち往生しています。必要条件に従ってSQL Serverで文字列を分割する
categories
とurl-key
列が期待される結果のように変更しなければなりません。 url-key
列は、小文字で、-
で区切る必要があります。
私は、出力は次のようになりたい:あなたはこのために、SQL Serverの機能のカップルを必要とするよう
親SKUを持つ入力テーブル、つまりBOO3
とその子スキーマBOO3L,BOO3S,BOO3M
があります。これはこれまでの私のコードで、私はここで立ち往生しています。必要条件に従ってSQL Serverで文字列を分割する
categories
とurl-key
列が期待される結果のように変更しなければなりません。 url-key
列は、小文字で、-
で区切る必要があります。
私は、出力は次のようになりたい:あなたはこのために、SQL Serverの機能のカップルを必要とするよう
が見えます。データと
まずテストテーブルは、あなたが与えた:カテゴリについては
CREATE TABLE [TestTable]
([sku] VARCHAR(10), [product_type] VARCHAR(50), [categories] VARCHAR(100),
[name] VARCHAR(255), [url_key] VARCHAR(255));
INSERT INTO [TestTable]
VALUES
('B003', 'configurable', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL),
('B003L', 'simple', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL),
('B003M', 'simple', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL),
('B003S', 'simple', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL);
SELECT * FROM [TestTable];
、あなたがCHARINDEX()またはPATINDEX()は明らか「→」(ALT + 26をカットする必要があります、私がしなければなりませんでしたそれを見てください)。
URLは、タイトルケースを削除するにはLOWER()、スペースをハイフンに変更するにはREPLACE()が必要です。
最後に、「Small、Medium、Large」は、それが何であるかを確認するためにRIGHT()と、関連する接尾辞を追加するためのCASEが混在している必要があります。
SELECT
[sku]
, [categories] = SUBSTRING([categories], CHARINDEX('→', [categories]) + 1, 1000)
, [name]
, [url-key] = CASE
WHEN RIGHT([sku], 1) = 'L' THEN REPLACE(LOWER([name]), ' ', '-') + '-large'
WHEN RIGHT([sku], 1) = 'M' THEN REPLACE(LOWER([name]), ' ', '-') + '-medium'
WHEN RIGHT([sku], 1) = 'S' THEN REPLACE(LOWER([name]), ' ', '-') + '-small'
ELSE REPLACE(LOWER([name]), ' ', '-')
END
FROM [TestTable]
ORDER BY (CASE
WHEN RIGHT([sku], 1) = 'L' THEN 4
WHEN RIGHT([sku], 1) = 'M' THEN 3
WHEN RIGHT([sku], 1) = 'S' THEN 2
ELSE 1
END) DESC
DROP TABLE [TestTable];
私の知る限り、これにあなたが望むように注文する全く自然な方法がない、ので、最後に別のCASE文がORDER BY
権利を取得します。
よろしくお願いします。@Shaneis .. –