Я сохраняю номера социального страхования в базе данных, но вместо хранения целых чисел я сохраняю только 5-значную последовательность. Итак, если SSN # 123-12-1234, моя база данных сохранит его # 23121 ### или #### 21234 или что-нибудь еще, если у него есть 5 цифр в строке.Как искать частичные/маскированные строки?
Поэтому, когда пользователь вводит весь SSN, я хочу, чтобы база данных находила все совпадения.
Таким образом, я могу это сделать:
SELECT * FROM user WHERE ssn like 123121234
Но выше запрос не будет работать, так как у меня есть несколько замаскированных символов в поле ПКР (# 23121 ###). Есть ли хороший способ сделать это?
Может быть хорошим способом было бы использовать
SELECT * FROM user WHERE REPLACE (ssn, '#', '') like 123121234
Хотя может быть проблема - запрос может вернуться нерелевантные матчи с 5 номерами, которые я храню в БД может быть где угодно в последовательности.
Любая идея, как сделать лучший поиск?
Являются ли незамасленные номера всегда последовательными (т. Е. 5 цифр в блоке или разложены)? Является ли производительность проблемой? –
Всегда 5 номеров в строке, но их местоположение случайное – Andrew
, так что это может быть '# 1 ## 1 # 111'? –