2016-04-24 30 views
0

這裏是具有父SKU的輸入表,即BOO3及其子SKUS BOO3L,BOO3S,BOO3M。這是我的代碼到目前爲止,我卡在這裏。根據需要在SQL Server中分割字符串

enter image description here

categoriesurl-key欄應該改變像預期的結果。 url-key列應該是小寫,用-分隔。

我所要的輸出是這樣的:

enter image description here

回答

1

看起來你需要的一對夫婦的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()擺脫Title Case和REPLACE()將空格更改爲連字符。

最後,您的'小,中,大'需要混合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因爲,據我所知,沒有訂購這就是你想要的方式自然的方式。

+0

謝謝你這麼多@Shaneis ..我感謝你的幫助:) –