Я работаю над обновлением системы, которая хранит финансовую информацию, и использую структуру таблицы, которая использует поля DECIMAL для рассматриваемых данных.
К сожалению, мой предшественник в своей Бесконечной Мудрости реализовал поля в старой базе данных как varchar.Объем проверки ввода данных, который был проведен, также, по-видимому, был невелик, и есть все виды ненужных данных.В некоторых полях хранится значение NaN, в некоторых хранятся значения в формате 1 234 567,89, в некоторых значениях в формате 1,234,567,89, в некоторых - 1234567,89, в некоторых - символы валюты в конце, в некоторых - символы валюты посередине, в некоторых даже суммы!(Например, 123 + 456).
Очевидно, что приведение в DECIMAL может помочь только с некоторыми из них.В тех случаях, когда первый символ не числовой, я верну 0.Хуже того, в тех случаях, когда в числе есть запятые или несколько десятичных знаков, я получу неверный результат.
Мне нужен какой-то способ массирования данных в более полезную форму, например:
- 1234567.89 -> 1234567.89 (здесь будет работать просто приведение)
- 1234567.89$ -> 1234567.89 (приведение к ним, кажется, дает правильный результат)
- £ 1234567.89 -> 1234567.89 (приведение к возврату 0)
- 1 234 567,89 -> 1234567.89 (приведение к приведению здесь возвращает 1)
- 1.234.567.89 -> 1234567.89 (кастинг дает 1.234)
- 123 + 456 -> 579.00 (не знаю, как мне поступить с ними)
- NaN или другоенечисловые данные -> 0 (нет разумного способа с ними справиться, поэтому достаточно просто вставить 0)
Мне также, естественно, придется иметь дело с делами с несколькиминеисправности, такие как $ 1234,567,89.
Я думаю, что Regex - единственный вариант здесь, но, насколько я могу судить, MySQL обеспечивает только сопоставление регулярных выражений, и, похоже, не имеет никаких функций замены регулярных выражений.
Если бы вы могли помочь с этим, я был бы очень признателен.