Я использую SQLite3 для тестирования. Я пытаюсь реализовать маску формата поиска в предложенииwhere, чтобы очистить некоторый текст произвольной формы, хранящийся в базе данных.
Можно ли извлечь четыре цифры, за которыми следует тире, а затем пять цифр, например. хххх-ххххх
Вот некоторые варианты данных, которые у меня есть:
'Widget 1234-12345 Blah Blah',
'1234-12345_A',
'1234-12345 and 6789-12345'
'1234-1234567'
Все вышеперечисленное должно возвращать «1234-12345», поскольку это первое значение, которое будет соответствовать нашему числовому мачту xxxx-xxxxx.


SQLite поддерживает Regex для запросов выбора со следующим синтаксисом:
SELECT * FROM table WHERE attribute REGEXP '[0-9]{4}-[0-9]{5}';
Регулярное выражение
[0-9]{4}-[0-9]{5}
даст вам 4 цифры, за которыми следует тире, а затем 5 цифр. Если вы хотите сопоставить не только цифры, но и все, что их окружает, измените Regex на
.*[0-9]{4}-[0-9]{5}.*
Он предоставит вам все ведущие и конечные символы любой формы.
@LeeMurray, если честно, я не знаю, как превратить результат в новый столбец
Обычно я бы сделал что-то вроде, но функция не существует в SQLite: - выберите REGEXP_SUBSTR('Widget 1234-12345 Blah Blah', '[0-9]{4}-[0-9]{5}') new_item
@LeeMurray, не можешь ли ты попытаться объединить мой оператор выбора с материалом new_item?
Не могли бы вы изолировать вывод формата в отдельные столбцы?