#regex #apache-spark #apache-spark-sql
#регулярное выражение #apache-spark #apache-spark-sql
Вопрос:
Я пытаюсь понять, почему следующий запрос просматривает почтовые индексы, которые я бы не ожидал.
SQL
Select distinct Postcode from tableA where like 'NE1%';
Показывает 2 почтовых индекса, все начинающиеся с NE1
Я пробовал :-
Select distinct Postcode from tableA where rlike '^NE[0-1]%'
Показывает много почтовых индексов, включая 2 сверху, например NE27 0EZ — я предполагаю, потому что во 2-й части почтового индекса есть ноль, но понятия не имею, почему появляется NE2 2NE!
Моя цель — отфильтровать все почтовые индексы, которые начинаются с N (не NE), НО имеют только числовое значение в качестве следующего символа — только SQL, а не python или scala, поскольку этот фильтр формирует 1 из многих фильтров почтовых индексов (большое предложение OR)
Я бы подумал, что для всех почтовых индексов, начинающихся с N, которые имели числовое значение в качестве следующего символа, сработали бы :-
Select distinct Postcode from tableA where rlike 'N[0-9] %' or 'N[0-9][0-9] %'
select distinct 'rlike' as Func , postcode from npex.npex where postcode rlike '^NE[0-1]*'
union
select distinct 'like', postcode from npex.npex where postcode like 'NE1%'
order by 1;
RESULTS
Func postcode
like NE1 3BB
like NE12 1AB
rlike NE27 0EZ
rlike NE6 2UT
rlike NE27 0LT
rlike NE12 1AB
rlike NE2 2NE
rlike NE3 4DT
rlike NE1 3BB
Ответ №1:
*
не требуется, иначе вы бы сопоставили 0 или более нулей или единиц.
select distinct postcode from npex.npex where postcode rlike '^NE[0-1]'
Если вы хотите получить те, которые начинаются с N, за которым следует число, вы можете использовать
select distinct postcode from npex.npex where postcode rlike '^N[0-9]'