У меня есть многомиллионная таблица строк с полем varchar. Некоторые из строк varchar являются числами с плавающей запятой. Нет никаких ограничений на другие поля, которые могут полностью изолировать, какие строки являются числами, а какие нет. Я хочу создавать запросы с ORDER BY в строках с числовым значением в поле varchar (игнорируя нечисловые значения). Я не могу просто вызвать MyField :: numeric, потому что это приводит к появлению нечисловых строк.
Я подумал о двух основных вариантах:
(a) Используйте регулярное выражение, чтобы определить, является ли строка числовой.
(b) Перехватить исключение приведения и вернуть ноль для всех нечисловых значений.
Скорость имеет решающее значение. Я попробовал вариант (а), и это мучительно медленно. Я создал хранимую процедуру, чтобы использовать регулярные выражения для проверки значения перед приведением. Номера не возвращаются как ноль. Я создал индекс, используя эту хранимую процедуру. Регулярное выражение очень дорого. Но мне интересно, стоит ли даже пытаться поймать исключение.
Есть ли простой способ, чтобы MyField :: numeric возвращал нули для нечисловых данных? Любые предложения, чтобы сделать это быстрее?
Спасибо