antox
Дата: 03.05.2012 09:29:21
подскажите, как обойти ошибки:
Имеется таблица table1 с полем field1, тип поля varchar, данные 0001, 0002, 03, 4, 6 и т.д., но могут встретится а буквы, например - а0001, ю7 и т.д.
Когда выполняется следующий запрос, то естественно появляется ошибка и обработка останавливается
select cast(field1 as integer) from table1
А мне необходимо, чтобы поля записи имеющие в поле символы отличные от 0-9 игнорировались...
видимо, как-то в where можно это реализовать, но как???
o_v_a
Дата: 03.05.2012 09:45:48
1) Отсечь на клиенте и не допускать появления нецифровых символов.
2) Изменить тип поля на INTEGER
o_v_a
Дата: 03.05.2012 10:01:24
А еще можно добавить в таблицу поле (тоже VARCHAR) и перед вставкой триггером вычислять значение, выкидывая из оригинала нецифровые символы. Выборку потом делать с нового поля, а не пытаясь преобразовывать оригиналmysq VARCHAR в INTEGER.
Окончательное решение зависит от того, какие все же данные вводит пользователь. Правильны ли данные с буквами или они ошибочны и этим ошибкам преднамеренно разрешено появляться?
S.G.
Дата: 03.05.2012 10:02:40
Так это не ошибки cast, а ошибки проектирования.
googlerus
Дата: 03.05.2012 10:33:31
Что-то не могу войти под antox, пришлось зарегистрироваться заново
Это не ошибка проектирования, это необходимость
googlerus
Дата: 03.05.2012 10:33:58
Программа пишет с генератора значение в поле, поле символьное, чтобы пользователь мог дописать буквы (если ему необходимо), однако если пользователь захочет задать " генератора, то мне необходимо проверить не меньше ли новое значение генератора, чем существующее в базе максимальное значение поля field1 (в формате int)
Т.е.
field1 при таком раскладе необходимо не давать пользователю установить значение генератора меньше 9, чтобы след было 10
--------
1
2
3
4
5
a6
i7
8
9
googlerus
Дата: 03.05.2012 10:39:01
Видимо все-таки придется field1 делать числового типа...
Ivan_Pisarevsky
Дата: 03.05.2012 10:42:07
googlerus |
---|
пользователь захочет задать " генератора |
Кривизна в квадрате?
Навесил на поле уник индекс, если какой-то чудик забежал вперед паровоза словит эксепшн. И будет ловить до тех пор пока не поймет, что забегать вперед не стОит.
googlerus
Дата: 03.05.2012 10:43:38
Ivan_Pisarevsky |
---|
googlerus |
---|
пользователь захочет задать " генератора | Кривизна в квадрате?
Навесил на поле уник индекс, если какой-то чудик забежал вперед паровоза словит эксепшн. И будет ловить до тех пор пока не поймет, что забегать вперед не стОит. |
Значения поля не уникальны!
Ivan_Pisarevsky
Дата: 03.05.2012 10:47:03
googlerus |
---|
Значения поля не уникальны! |
чем дальше в лес, тем толще партизаны...