2014-03-12 47 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 
相关问题