2014-06-21 2 views
0

Я пытаюсь получить все значения, которые существуют в одной таблице, а не в другом. Условие присоединиться к ним - varchar в одной таблице, а bigInt - в другом (swmItems - bigInt, OBJ_TAB - varchar). Я пробовал следующее:Преобразование varchar в bigInt, включая нулевые значения

SELECT si.upc as upc from swmItems si 
left outer join dbo.OBJ_TAB obj on cast(obj.F01 as BIGINT) = si.upc 
WHERE obj.F01 IS NULL 

однако это дает мне ошибку: «Ошибка преобразования типа данных varchar в bigint».

Я также попробовал следующее:

SELECT * FROM OBJ_TAB WHERE ISNUMERIC(f01) != 1 

И вернуть ничего, так что все мои ценности должны быть номера в OBJ_TAB

Я думаю, что это из-за значения существуют в первой таблице, а не второй (пытается преобразовать null в bigInt). Есть ли способ присоединиться к двум таблицам таким образом?

Я использую Microsoft SQL 2012

Сноска: В OBJ_TAB существует число нулей перед числами вот почему сравнивая все как VARCHAR не работает для меня.

+0

И что тип данных 'upc'? –

+0

upc: bigInt, F01: varchar – kousha

+1

'ISNUMERIC' отвечает на вопрос, который никто никогда не хотел спрашивать - если вы хотите найти строки, которые нельзя преобразовать в' bigint', вам, вероятно, просто нужны строки, содержащие что-либо кроме цифр. Попробуйте 'SELECT * FROM OBJ_TAB WHERE f01 LIKE '% [^ 0-9]%'', чтобы найти строки проблем. –

ответ

2
SELECT swmItems.upc 
FROM swmItems 
    LEFT JOIN OBJ_TAB 
     ON CASE WHEN ISNUMERIC(OBJ_TAB.F01 + '.e0') = 1 -- ensure no decimals 
       THEN CASE WHEN CONVERT(float, OBJ_TAB.F01) BETWEEN -9223372036854775808 
                   AND 9223372036854775807 
          THEN CONVERT(bigint, OBJ_TAB.F01) 
         END 
      END = swmItems.upc 
WHERE OBJ_TAB.F01 IS NULL 
0

Вы не можете преобразовать любое числовое значение в целочисленный тип данных. но вы можете преобразовать числовое значение в тип данных varchar.

Итак, вы можете попробовать это.

SELECT si.upc as upc from swmItems si 
left outer join dbo.OBJ_TAB obj on obj.F01 = Cast(si.upc As Varchar) 
WHERE obj.F01 IS NULL 
+0

Правда, однако, как я сказал в вопросе, формат F01 выглядит примерно так: «00090001», а upc: 90001, varchar для этих двух значений не будет таким же, а затем – kousha

+0

. добавьте нули для числа. Right ('00000000' + Cast (si.upc As Varchar), 8) – Shell

+0

Да, но я не знаю, сколько. Общее число цифр должно быть 13. Поэтому, если мой номер равен 1, тогда мне нужно добавить 12 нулей в начале, а если число 3333333, я просто добавлю 6 нулей – kousha

Смежные вопросы