2017-09-25 58 views
0

我需要按照一些規則給我寫一個SEO朋友格式的歌曲標題。SQL Server:字符串操作來寫出搜索引擎優化友好標題

最大lentgh是52個字符。目前截斷髮生在以CL開始的記錄上,並且與一組關聯ID有關。

額外的規則我要申請是:

  • 如果seo_friendly_title以結束「 - 」將其刪除。
  • 如果 截斷在單詞或空格的中間結束,則移至下一空格(下一個單詞的結尾) 。

我想我必須添加嵌套的CASE語句才能完成此操作,但我不知道在哪裏添加這個新檢查。

我想請求你幫忙完成這個算法,希望有人可以分享他們的經驗,並展示/解釋如何做到這一點。

非常感謝。

這裏是我當前的SQL查詢:

SELECT 
    [sfwt].[seo_friendly_title] 
, CASE  
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) THEN 
      LEFT([sfwt].[seo_friendly_title], 52) 
    END [seo_final_title] 
FROM 
    [dbo].[SEOFriendly_WorkingTable] [sfwt] 
INNER JOIN [dbo].[ProductData] [pd] 
    ON [pd].[ProductID] = [sfwt].[pf_id] 
WHERE [sfwt].[pf_id] LIKE 'CL%' 
ORDER BY  
    [sfwt].[pf_id]; 

和輸出:

seo_friendly_title seo_final_title 
prelude-no-5-for-trumpet-and-piano-johann-sebastian-bach prelude-no-5-for-trumpet-and-piano-johann-sebastian- 
prelude-no-8-for-trumpet-and-piano-johann-sebastian-bach prelude-no-8-for-trumpet-and-piano-johann-sebastian- 
highlights-from-the-lord-of-the-rings-the-return-of-the-king highlights-from-the-lord-of-the-rings-the-return-of- 
air-ecossais-spirituoso-e-marciale-opus-107-no-10-f-instrument-piano air-ecossais-spirituoso-e-marciale-opus-107-no-10-f- 
air-ecossais-spirituoso-e-marciale-opus-107-no-10-c-instrument-piano air-ecossais-spirituoso-e-marciale-opus-107-no-10-c- 
air-de-la-petite-russie-opus-107-no-3-bb-instrument-piano air-de-la-petite-russie-opus-107-no-3-bb-instrument- 
air-de-la-petite-russie-opus-107-no-3-eb-instrument-piano air-de-la-petite-russie-opus-107-no-3-eb-instrument- 
shell-be-coming-round-the-mountain-c-instrument-and-piano shell-be-coming-round-the-mountain-c-instrument-and- 
shell-be-coming-round-the-mountain-f-instrument-and-piano shell-be-coming-round-the-mountain-f-instrument-and- 
9-ecossaises-from-38-waltzer-landler-und-ecossaisen-op-18 9-ecossaises-from-38-waltzer-landler-und-ecossaisen- 

回答

1

在這裏,你去。更新09/27

SELECT 
    [sfwt].[seo_friendly_title] 
, CASE  
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) and LEFT([sfwt].[seo_friendly_title], 52) LIKE '%-' THEN LEFT([sfwt].[seo_friendly_title], 51) 
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) THEN LEFT([sfwt].[seo_friendly_title], 52) 
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) and LEFT([sfwt].[seo_friendly_title], 52) NOT like '%-' 
      and left(Replace([sfwt].[seo_friendly_title],LEFT([sfwt].[seo_friendly_title], 52),''),1) <> '-' 
      and Charindex('-',Replace([sfwt].[seo_friendly_title],LEFT([sfwt].[seo_friendly_title], 52),'') = 0 then [sfwt].[seo_friendly_title] 
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) and LEFT([sfwt].[seo_friendly_title], 52) NOT like '%-' 
      and left(Replace([sfwt].[seo_friendly_title],LEFT([sfwt].[seo_friendly_title], 52),''),1) <> '-' 
      and Charindex('-',Replace([sfwt].[seo_friendly_title],LEFT([sfwt].[seo_friendly_title], 52),'') != 0 then LEFT([sfwt].[seo_friendly_title], 51 + Charindex('-',Replace([sfwt].[seo_friendly_title],LEFT([sfwt].[seo_friendly_title], 52),''))) 
    END [seo_final_title] 
FROM 
    [dbo].[SEOFriendly_WorkingTable] [sfwt] 
INNER JOIN [dbo].[ProductData] [pd] 
    ON [pd].[ProductID] = [sfwt].[pf_id] 
WHERE [sfwt].[pf_id] LIKE 'CL%' 
ORDER BY  
    [sfwt].[pf_id]; 
+0

我打算用這個作爲出發點,當我取得進展時,我可能會提出一個新問題。謝謝拉胡爾。 –

0

你可以試試這個爲1點,但我不明白的點數其中兩個是「如果截斷在單詞或空格的中間結束,然後移到下一個空格(下一個單詞的結尾)。「你能分享一下這個例子嗎?

SELECT 
    [sfwt].[seo_friendly_title] 
, CASE  
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) and LEFT([sfwt].[seo_friendly_title], 52) LIKE '%-' THEN LEFT([sfwt].[seo_friendly_title], 51) 
     WHEN [sfwt].[pf_id] LIKE 'CL%' AND [pd].[AssociationID] IN (1, 3, 4) THEN LEFT([sfwt].[seo_friendly_title], 52) 
    END [seo_final_title] 
FROM 
    [dbo].[SEOFriendly_WorkingTable] [sfwt] 
INNER JOIN [dbo].[ProductData] [pd] 
    ON [pd].[ProductID] = [sfwt].[pf_id] 
WHERE [sfwt].[pf_id] LIKE 'CL%' 
ORDER BY  
    [sfwt].[pf_id]; 
+0

嗨拉胡爾,這裏是一個示例字符串。原文:air-ecossais-allegretto-op-107-no-9-f-instrument-piano。截斷後:air-ecossais-allegretto-op-107-no-9-f-instrument-pia。在這種情況下,我將不得不作出例外並轉到鋼琴這個詞的末尾。 –

+0

嘗試一下。張貼在另一個答案 –

+0

嗨拉胡爾,我不知道我一直跟隨你的最新查詢,但我試圖運行它,看看它給出了什麼結果。同時,這條線:THEN LEFT([sfwt]。[seo_friendly_title],51)+ CHARINDEX(' - ',REPLACE([sfwt]。[seo_friendly_title],LEFT([sfwt]。[seo_friendly_title],52)), ''))會拋出一個錯誤::「將轉換varchar值'a-rumor-in-st-petersburg'轉換爲數據類型int時轉換失敗。」 –

相關問題