Sql, Compged, Min и заготовки

Я сравниваю 4 строки, используя compged в sql вот выдержка:

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

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

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

2 ответа

Вы можете вычислить новые переменные, чтобы справиться с этой ситуацией (обе сравниваемые переменные являются пустыми) и использовать их внутри 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

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

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

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

Другие вопросы по тегам