2013-09-25 30 views
5

我需要提取連字符右側的所有字符作爲select語句的一部分。在選擇中會有其他列。在下面的查詢中,從第二列中選擇正確的三個字符。我如何在分隔符右側提取無限數量的字符 - 在我的情況下是連字符?我可以使用正確的功能嗎?我是否需要使用其他功能?提取SELECT語句中分隔值右側的字符

Select column1, right(column2,3) as extracted, column3 
From myTable 

我使用SQL Server 2008的

+0

我們正在查看哪個版本的SQL? – Paul

回答

13

這個問題有一個數據庫,具體的答案。

如果使用SQL Server:

SELECT column1 
    , RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) as extracted 
    , column3 
FROM myTable 

您可以添加CASE陳述或者如果使用NULLIF()連字符並不總是存在:

SELECT column1 
    , CASE WHEN column2 LIKE '%-%' THEN RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) 
      END as extracted 
    , column3 
FROM myTable 

或者:

SELECT column1 
    , RIGHT(column2,NULLIF(CHARINDEX('-',REVERSE(column2)),0)-1) as extracted 
    , column3 
FROM myTable 

如果使用MySQL,只需將CHARINDEX()更改爲LOCATE()。我相信甲骨文這是INSTR()和前兩個參數切換,首先是你搜索的字符串,然後是你搜索的字符串。

+0

我正在使用SQL Server。我剛剛編輯了這個主題。感謝您及時的回覆。 – user2525015

+0

我收到上面的消息「無效長度參數」。它將-1解釋爲一個長度。如果我替換一個正數,查詢就可以工作。我可以得到上述工作長度未指定嗎? – user2525015

+0

發生這種情況時,沒有連字符,第二個查詢是爲此而構建的。 –

1

如何:

SUBSTRING(column2, CHARINDEX('-',column2)+1, 8000) 

(更換8000與列的定義)

當然,如果列中可能並不總是包含一個連字符,那麼你可以說:

SUBSTRING(column2, COALESCE(NULLIF(CHARINDEX('-',column2)+1,1),1),8000) 

如果該列不包含連字符,則會顯示整列。如果要排除那些結果,你可以添加一個WHERE條款:

WHERE CHARINDEX('-', column2) > 0 

或者你可以使用一個CASE表達像山羊CO的答案。

+0

謝謝。根據列的定義,你是什麼意思?你的意思是這種類型? – user2525015

+0

@ user2525015我的意思是長度。 VARCHAR(255),VARCHAR(8000)等。 –

+0

這會導致錯誤「varchar不是內置的函數名稱」。我正在使用SQL Server 2008.我最初忽略了包含這一點。我不知道這與這個錯誤有什麼關係。 – user2525015