2014-03-12 44 views
0

所以我有2個表test1和test2,它們都包含列:id,類型,數字,我想選擇表test1中不在表中的所有數字test2,我知道這會起作用;選擇字段不在表中,但從字母數字數據

SELECT test1.number,test2.number 
FROM test1 LEFT JOIN test2 ON test1.number=test2.number 
WHERE test2.number is null; 

它返回什麼,我一直在尋找,當數列是完全的數字,但恰好是在新表新的號碼,如:

test1.number 
MFP773773 
**MFP874747** 
MFP099290 
MFP763636 

test2.number 
HBM366363 
**HBM874747** 
HBM773383 
HBM092827 

那麼,我該怎麼做同樣的事情,但只有第二行中的「數字」的數字部分(數字相同但字母不相同),它們返回不同數字的方式無論數字前的字符如何,請幫助。

非常感謝。

+0

你想比較這兩個表中的數字在兩個coulmns?在你的問題中,你提到了第二行,其中數字是相同的,但字母不是,你能告訴我你的意思是什麼? –

+0

是否總是有3個字母? – Szymon

回答

0

這是一個可以提取數字的用戶定義函數。試試看看。

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 

/* Run the UDF with different test values */ 
SELECT dbo.udf_GetNumeric('') AS 'EmptyString'; 
SELECT dbo.udf_GetNumeric('[email protected]@@') AS '[email protected]@@'; 
SELECT dbo.udf_GetNumeric('123456') AS '123456'; 
SELECT dbo.udf_GetNumeric('asdf') AS 'asdf'; 
SELECT dbo.udf_GetNumeric(NULL) AS 'NULL'; 
GO 
相關問題