2015-05-07 2 views
1

я сравниваю 4 строки с использованием compged в SQL здесь отрывок:Sql, Compged, Мин и заготовки

MIN(compged(a.string1,b.string1), 
compged(a.string1,b.string2), 
compged(a.string2,b.string1),    
compged(a.string2,b.string2)) < 200 

К сожалению, бывают случаи, что строка из множества а и строка из множества Ь пусто/empty, это означает, что compaged разрешает 0, а найденное значение равно 0. Есть ли способ изменить, чтобы сравнение двух пустых строк давало значение больше 200 или что-то еще?

Заранее спасибо

+0

его часть прока SQL заявления в SAS – matthew

ответ

0

Быстрый и грязный вариант, чтобы обернуть каждую строку с другой 200char строки в случае строка равна нулю или длина 0 (как пустые строки не всегда ссылаются как NULL) Итак, a.string1 = 200 * 'Z', b.string1 = 200 * 'X' .....

Или лучше даже обернуть каждый вызов с помощью проверок, если a.string1 является нулевым или пустым, затем верните длину другой строки. И если оба они пусты, то верните 1000, чтобы запись была удалена предложением where.

Вы также можете добавить префикс - 'A' ко всем строкам. Это гарантирует, что нет пустых строк и не изменит расстояние. Но вам все равно нужно отсеять случаи, когда обе строки пусты.

4

Вы можете рассчитать новые переменные для обработки этой ситуации (как в сравнении переменных пустые) и использовать их внутри MIN() функции:

case 
    when (missing(a.string1) and missing(b.string1)) then 300 
    else compged(a.string1,b.string1) 
end as compged_11, 
/* do the same for combinations 12, 21 and 22 */ 
MIN(calculated compged_11, 
    calculated compged_12, 
    calculated compged_21, 
    calculated compged_22) < 200 
Смежные вопросы