Мне нужно выполнить запрос к нескольким миллионам записей, сравнивая SSN в одной таблице с производным SSN (я получаю его из более длинного идентификатора, в котором SSN хранится как первые девять символов в этом столбце) в другой таблице. В TABLE1 SSN хранится в виде десятичного числа (9,0). В TABLE2 SSN хранится как char(23). Я запускаю выборку, которая захватывает первые 9 символов, используя этот запрос, который также проверяет, являются ли первые 9 символов числовыми:
LENGTH(RTRIM(TRANSLATE(left(ee.award_id,9), '', '0123456789'))) = 0
DB2 ZOS9 не позволяет мне напрямую преобразовать char в десятичное число, а это означает, что мне нужно преобразовать свой char в varchar, а затем в десятичное число (9,0), чтобы сравнить его с SSN в TABLE1.
Мой вопрос: лучше ли
дважды приведите мой SSn, полученный из символа, в varchar, а затем в десятичное число и сравните с десятичным SSN в TABLE1 или
cast (cast(left(ee.award_id,9) as varchar(9))as decimal(9,0))
лучше ли преобразовать мой десятичный SSN в varchar и мой производный SSN char в varchar, а затем сравнить два или
два одинаковых по производительности?
Спасибо.