2013-11-09 64 views
1

我正在使用follow函數從字符串中獲取數字。SQL如何獲得結尾編號

CREATE FUNCTION dbo.udf_GetNumeric 
(@strAlphaNumeric VARCHAR(256)) 
RETURNS VARCHAR(256) 
AS 
BEGIN 
    DECLARE @intAlpha INT 
    SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) 
    BEGIN 
     WHILE @intAlpha > 0 
     BEGIN 
      SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '') 
      SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) 
     END 
    END 
    RETURN ISNULL(@strAlphaNumeric,0) 
END 
GO 

在大多數情況下它的用法很有幫助。

但並非如此。

字符串看起來是這樣的:

string-goes-here-123450 
string-2-goes-here-1233 

在第一種情況下,輸出是正確的是123450,但在第二,產量爲21233.

我的問題是如何才能得到結束從分離數的最後一位「 - 」

+0

爲什麼不是21233正確的? –

+0

,因爲結束號碼是我需要的product_id – Kush

+0

是這個mysql或sql server嗎? –

回答

1
create table #test(
    input varchar(50) 
) 
go 
insert into #test values 
    ('string-goes-here-123450'), 
    ('string-2-goes-here-1233') 
go 
select t.input, right(t.input,charindex('-',reverse(t.input))-1) as output 
from #test t 

生產: -

input     output 
string-goes-here-123450 123450 
string-2-goes-here-1233 1233 
1

試試這個......先找到-最後一次出現,然後把字符串的結尾

SET @pos = LEN(@string) - CHARINDEX('-',REVERSE(@string)) 

select substr(@string, @pos+1, @len(@str)) 

編輯:它可能是@pos-1 ...我沒有這臺計算機上的sql服務器,所以我不能測試和mysql的功能是不夠的,我不知道我翻譯它正確。請試試看,並告訴我。