Выберите поле, которое находится не в таблице, а из буквенно-цифровых данных

Итак, у меня есть 2 таблицы test1 и test2, обе они содержат столбцы: id, type, number, я хочу выбрать все числа из таблицы 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

Тогда как я могу сделать то же самое, но только с числовой частью «числа», как во второй строке, где число такое же, а буквы — нет, они возвращают разные числа независимо от символов перед числами, пожалуйста помоги.

Большое спасибо.


person user3412266    schedule 12.03.2014    source источник
comment
Вы хотите сравнить две таблицы с числами в обоих столбцах?? в своем вопросе вы упомянули вторую строку, где число такое же, а буквы разные, можете ли вы показать мне, какие значения вы подразумеваете под этим ??   -  person Mahesh Sambu    schedule 13.03.2014
comment
Всегда ли 3 буквы?   -  person Szymon    schedule 13.03.2014


Ответы (1)


Вот определяемая пользователем функция, которая может извлекать числа. попробуйте и посмотрите.

 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('asdf1234a1s2d3f4@@@') AS 'asdf1234a1s2d3f4@@@';
SELECT dbo.udf_GetNumeric('123456') AS '123456';
SELECT dbo.udf_GetNumeric('asdf') AS 'asdf';
SELECT dbo.udf_GetNumeric(NULL) AS 'NULL';
GO
person Mahesh Sambu    schedule 13.03.2014