powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как обработать ошибку преобразования типов?
25 сообщений из 25, страница 1 из 1
Как обработать ошибку преобразования типов?
    #32638771
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поле Field1 типа VarChar таблицы Table1 содержит как числовые так и символьные значения.
По этому полю нужно сделать поиск. Запрос вида
Код: plaintext
SELECT ID FROM Table1 WHERE CAST(Field1 AS Integer) >  10  
выдает ошибку преобразования типов.
Вопрос: Возможно ли в запросе избежать этой ошибки? Или может быть есть какие-то функции аналогичные оператору IF в delphi?
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32638816
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер то какой ?
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32638817
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interbase 7.1
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32638844
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEVInterbase 7.1Мышки кололись, плакали, но упорно продолжали жрать кактус...
UDF пиши, которая будет отсекать лишние знаковые символы.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32638852
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну про грамотное проектирование говорить не буду. Сам понимаешь...
А так... УДФ поможет.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32638925
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnmen Ну про грамотное проектирование говорить не буду. Сам понимаешь...
Да, понимаю. С базами данных не первый день работаю. Только с IBase недавно.

Насколько я понял UDF хранятся в отдельных dll (могу ошибаться), и подозреваю что с ними возникнут проблемы при распространении приложения, поэтому не хотелось бы с ними связываться.
Возможно у кого-то есть другие мысли?

МимопроходящийМышки кололись, плакали, но упорно продолжали жрать кактус... Это к чему?
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639059
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEV Johnmen Ну про грамотное проектирование говорить не буду. Сам понимаешь...
Да, понимаю. С базами данных не первый день работаю. Только с IBase недавно.Ну и фиг ли тогда такое поле создал?
FEVНасколько я понял UDF хранятся в отдельных dll (могу ошибаться), и подозреваю что с ними возникнут проблемы при распространении приложения, поэтому не хотелось бы с ними связываться.
Возможно у кого-то есть другие мысли?Не хочешь UDF - пиши SP.
Эффективность будет ниже на порядок.
FEV МимопроходящийМышки кололись, плакали, но упорно продолжали жрать кактус... Это к чему?К вопросу выбора сервера.
Для FB 1.5 можно было б извратиться в самом запросе, для IB вариантов не вижу.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639089
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийНу и фиг ли тогда такое поле создал?
Для тех, кто не понял, объясняю: нужно хранить в одном поле данные смешанного типа (почему именно в одном поле? Это долгая и не интересная история). В итоге пришли (не я один) к varchar.

2 Мимопроходящий
Не ясен момент с UDF. Нужно ли будет таскать dll c UDF вместе с базой данных?

МимопроходящийДля FB 1.5 можно было б извратиться в самом запросе, для IB вариантов не вижу.
А чуть подробнее про это самое "извратиться" можно? Вдруг из этого можно ещё как-нибудь извратиться и применить к IB? :)
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639123
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEVДля тех, кто не понял, объясняю: нужно хранить в одном поле данные смешанного типаОт нужно и всё тут!
Слово "нормализация" для нас пустой звук....
FEV(почему именно в одном поле? Это долгая и не интересная история). В итоге пришли (не я один) к varchar.Вечерело. А ёжики всё падали и падали...
    (Из анекдота) FEV2 Мимопроходящий
Не ясен момент с UDF.
Нужно ли будет таскать dll c UDF вместе с базой данных?Зачем же?
Сервер умеет телепатически скачивать UDF из любой точки замного шара
к себе в локаль. Не знал?
FEV МимопроходящийДля FB 1.5 можно было б извратиться в самом запросе, для IB вариантов не вижу.
А чуть подробнее про это самое "извратиться" можно? Вдруг из этого можно ещё как-нибудь извратиться и применить к IB? :)Нет.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639146
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Мимопроходящий
Не благодарю за бесполезные ответы.
Понтов у вас хоть отбавляй, а вот насчёт реальных знаний не уверен. Есть подозрения, что с вашим умением флудить вы будете пользоваться популярностью здесь
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639185
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поле Field1 типа VarChar таблицы Table1 содержит как числовые так и символьные значения.
По этому полю нужно сделать поиск. Запрос вида
Код: plaintext
SELECT ID FROM Table1 WHERE CAST(Field1 AS Integer) >  10  
МимопроходящийДля FB 1.5 можно было б извратиться в самом запросе, для IB вариантов не вижу.
Врядли. Потому как ни один из серверов не знает что больше "Едрить твою через коромысло" или 10 :)
А если символьные значения в выборку попадать не должны и данные отвечают определенным условиям, то вполне может прокатить
Код: plaintext
SELECT ID FROM Table1 WHERE CAST(Field1 AS Integer) >  10  and Field1 between '0' and '999999999'
Причем порядок условий в WHERE должон быть именно таким.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639191
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйПричем порядок условий в WHERE должон быть именно таким.Не забывай, что у IB не реализована опция CompleteBooleanEvaluation .
Потому и говорю, что для IB - без вариантов.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639214
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий ЛентяйПричем порядок условий в WHERE должон быть именно таким.Не забывай, что у IB не реализована опция CompleteBooleanEvaluation .
Потому и говорю, что для IB - без вариантов.
А мне почему-то казалось, что оно там как раз неполное, а полное включается этим параметром. Если наоборот, тогда да, тогда только в FB.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639222
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйSELECT ID FROM Table1 WHERE CAST(Field1 AS Integer) > 10 and Field1 between '0' and '999999999'
Причем порядок условий в WHERE должон быть именно таким.
Спасибо за идею, эта штука работает, но только придётся помучиться с условиями between, т.к. поле может содержать и значения вида "123-456/7".
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32639233
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйА мне почему-то казалось, что оно там как раз неполное, а полное включается этим параметром.
У FB оно "неполное" по умолчанию .
А параметр введён специально для совместимости с IB.
Чтоб его таки можно было сделать "полным", как у оного.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32640532
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну значит я заблуждался по поводу IB. Вообще-то затрудняюсь сказать когда полное вычисление логических выражений необходимо. Разве что когда в условии отбора присутствует вызов SP, модифицирующей данные и ее выполнение обязательно в любом случае или какой нибудь хитрой UDF. Вообщем на практике как-то не сталкивался.

А вон у FEV-а чего-то работает. Может а IB 7 чего изменили? Просьба к тем, кто имеет IB 7 (или кого IB7 имеет:) ) выполнить такой запрос:
select * from rdb$database where cast('a' as integer) = 0 and 1=0
Возникает ошибка?
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32640602
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For 'a':
Overflow occurred during data type conversion.
conversion error from string "a".

Для 'а':
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32640632
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит и в IB 7 полное вычисление логических выражений.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32640709
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйЗначит и в IB 7 полное вычисление логических выражений.А кто-то сомневался?..
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32640893
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийА кто-то сомневался?..
Доверяй, но проверяй:)
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32641864
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а не проще ли завести поле в котором указывать тип хранимых данных и долбошиться более? :)
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32641868
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу блин
читать:
НЕ долбошиться :)
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32642000
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klickтьфу блин
читать:
НЕ долбошиться :)

а потом придется еще какое нибудь поле заводить и долбошиться еще более, нет тут надо пересматривать структуру БД, но он ведь не один пришол к мнению что нада варачар
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32642060
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klickа не проще ли завести поле в котором указывать тип хранимых данных и долбошиться более? :) Не проще. Допустим ты добавишь поле Type_Field. Значение 1 в нем будет обозначать, что в поле Field храниться число в символьном виде. Выражения в условии WHERE вычисляються справа налево. Тогда логично написать:

WHERE Cast(Field as Integer) > 10 AND Type_Field = 1

Но при этом все равно получишь ошибку преобразования типов, потому что в IB оба операнда будут вычисляться ВСЕГДА. В FB вычислиться Type_Field = 1 и если его результат будет False, то до cast дело не дойдет. Для того, чтобы FB тоже поностью вычичлял логические выражения нужно в его конфигурационном файле написать CompleteBooleanEval = 1. Спрашивающий пользуется IB. Поэтому, пожалуй, у него есть 2 варианта:
1 Написать UDF. При этом индексированного поиска по результату UDF не будет.
2 Действительно завести дополнительное поле. Только в нем хранить преобразованное в Integer значение. Поле, соответственно, заполнять на триггерах. Там доступна обработка исключений, так что особых проблем при преобразовании не будет.
...
Рейтинг: 0 / 0
Как обработать ошибку преобразования типов?
    #32650543
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА вон у FEV-а чего-то работает. Может а IB 7 чего изменили? Просьба к тем, кто имеет IB 7 (или кого IB7 имеет:) ) выполнить такой запрос:
select * from rdb$database where cast('a' as integer) = 0 and 1=0
Возникает ошибка?
В этом случае ошибка возникает, а вот работает это тогда, когда вместо условия '1=0' указать условие выборки по индексированному полю (разумеется для тех таблиц, где это поле есть).
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как обработать ошибку преобразования типов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]