2011-09-02 143 views
3

T-SQL更新我想實現這個僞代碼在T-SQL用的switch-case語句

UPDATE Resources SET [Path]= CASE ([Path].Substring([Path].LastIndexOf('.'))) 
          WHEN '.jpg' THEN '/image.jpg' 
          WHEN '.png' THEN '/image.jpg' 
          WHEN '.avi' THEN '/video.jpg' 
          WHEN '.mkv' THEN '/video.jpg' 

它我用這個解決方案

UPDATE Resources SET [Path] = CASE (SUBSTRING([Path], LEN([Path]) - CHARINDEX('.', REVERSE([Path])) + 1, 3))     
             WHEN '.jpg' THEN '/image.jpg' 
             WHEN '.png' THEN '/image.jpg' 
             WHEN '.avi' THEN '/video.jpg' 
             WHEN '.mkv' THEN '/video.jpg' 
            END 

但它不會返回預期的結果。

任何人都可以給我工作版嗎?

+0

您是否認爲解決方案僅在「3」變爲「4」?案件使用情況如何,是嗎? –

回答

2

你擴展的讀取是錯誤的,而不是嘗試:

SUBSTRING(Path, LEN(Path) - CHARINDEX('.', REVERSE(Path)) + 1, LEN(Path)) 

(使用LEN(Path)作爲讀取長度;罰款,如果它溢出並允許n個字符的擴展名)

3

相反的SUBSTRING([Path], LEN([Path]) - CHARINDEX('.', REVERSE([Path])) + 1, 3), 嘗試使用lower(right([Path], 4))

+0

+1打我吧:) – Tomalak

+0

怎麼樣的情況下使用,是不是? –

+0

@Artur Keyan,更新爲包含'lower' –

6
UPDATE 
    Resources 
SET 
    Path = CASE SUBSTRING(Path, LEN(Path) - CHARINDEX('.', REVERSE(Path)) + 1, 4) 
      WHEN '.jpg' THEN '/image.jpg' 
      WHEN '.png' THEN '/image.jpg' 
      WHEN '.avi' THEN '/video.jpg' 
      WHEN '.mkv' THEN '/video.jpg' 
     END 
+0

+1,你打我更新我的答案,包括將第三個參數更改爲4 :) –

+0

+1噢,你擊敗了我。 – Garett

+0

您認爲解決方案僅在「3」變爲「4」嗎? 大小寫使用情況如何,是嗎? –

2

嘗試使用ParseName

UPDATE Resources SET [Path] = CASE (Parsename(Path,1))     
             WHEN 'jpg' THEN '/image.jpg' 
             WHEN 'png' THEN '/image.jpg' 
             WHEN 'avi' THEN '/video.jpg' 
             WHEN 'mkv' THEN '/video.jpg' 
            END 
0
UPDATE Resources SET ThumbnailPath = CASE SUBSTRING(ThumbnailPath, LEN(ThumbnailPath) - CHARINDEX('.', REVERSE(ThumbnailPath)) + 1, LEN(ThumbnailPath))    
        WHEN '.doc' THEN @root + '/doc.png' 
        WHEN '.docx' THEN @root + '/doc.png' 
        WHEN '.jpg' THEN @root + '/image.png' 
        WHEN '.jpeg' THEN @root + '/image.png' 
        WHEN '.gif' THEN @root + '/image.png' 
        WHEN '.png' THEN @root + '/image.png' 
        WHEN '.ppt' THEN @root + '/ppt.png' 
        WHEN '.pptx' THEN @root + '/ppt.png' 
        WHEN '.pdf' THEN @root + '/pdf.png' 
        ELSE    @root + '/other.png' 
       END 

謝謝我finaly使用

0

這個腳本將保證您不更新每次運行腳本時的所有行。它只會更新更改。

UPDATE r 
SET ThumbnailPath = newvalue 
FROM Resources r 
cross apply 
(SELECT right(ThumbnailPath, patindex('%_.%', reverse(ThumbnailPath))) T) a     
cross apply 
(SELECT CASE 
        WHEN a.T in ('doc','docx')   THEN @root + '/doc.png' 
        WHEN a.T in ('jpg','jpeg','gif','png') THEN @root + '/image.png' 
        WHEN a.T in ('ppt','pptx')    THEN @root + '/ppt.png' 
        WHEN a.T = 'pdf'      THEN '/pdf.png' 
        ELSE @root + '/other.png' 
       END newvalue) b 
WHERE r.ThumbnailPath <> b.newvalue