Неявное преобразование типов

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
nevadimka
Сообщения: 51
Зарегистрирован: 04 мар 2008, 10:33

Неявное преобразование типов

Сообщение nevadimka » 19 дек 2011, 20:43

Подскажите пожалуйста как работает преобразование типов или от чего зависит?
К примеру я одну таблицу по полю varchar связываю с другой по полю integer.
Оно integer приведет к varchar? Или наоборот? Или это зависит от того к какой таблице первой обратится?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Неявное преобразование типов

Сообщение dimitr » 20 дек 2011, 00:31

строку приведет к целому. А вообще, не надо так проектировать базу.

nevadimka
Сообщения: 51
Зарегистрирован: 04 мар 2008, 10:33

Re: Неявное преобразование типов

Сообщение nevadimka » 20 дек 2011, 12:10

Наверное сразу нужно было привести примеры:

Код: Выделить всё

create table t_varchar(f_string varchar(10));
create table t_integer(f_integer integer);
insert into t_varchar values('-00');
insert into t_integer values('0');

select 1 from t_varchar, t_integer
where t_varchar.f_string = t_integer.f_integer
PLAN MERGE (SORT (T_INTEGER NATURAL),SORT (T_VARCHAR NATURAL));

select 1 from t_varchar, t_integer
where t_varchar.f_string = t_integer.f_integer
PLAN JOIN (T_VARCHAR NATURAL,T_INTEGER INDEX (IND_T_INT))
Версия ФБ 1.5 Классик под Линукс РХ.

Первый запрос у меня возврашает 1, а второй null.
Конечно, если второй запрос написать вот так, то он тоже вернет значение:

Код: Выделить всё

select 1 from t_varchar, t_integer
where cast(t_varchar.f_string as integer) = t_integer.f_integer
PLAN JOIN (T_VARCHAR NATURAL,T_INTEGER INDEX (IND_T_INT))
БД, которая взамодейтсвует с другими системами на уровне файлового обмена, а это означает что в файле может прийти все что угодно, так что проектирование здесь не особо поможет.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Неявное преобразование типов

Сообщение dimitr » 20 дек 2011, 12:31

выкинь ФБ 1.5 и возьми либо 2.1 либо 2.5. Там нет таких проблем.

nevadimka
Сообщения: 51
Зарегистрирован: 04 мар 2008, 10:33

Re: Неявное преобразование типов

Сообщение nevadimka » 20 дек 2011, 12:55

Думаю это было преположение, так как на практике на версии 2.5 ситуация аналогичная

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Неявное преобразование типов

Сообщение dimitr » 20 дек 2011, 13:39

2.5.1 выдает правильно, я только что перепроверил

nevadimka
Сообщения: 51
Зарегистрирован: 04 мар 2008, 10:33

Re: Неявное преобразование типов

Сообщение nevadimka » 20 дек 2011, 18:58

Да на 2.5.1 второй запрос будет возвращать значение.
Осталось определиться это лучше или хуже, так как сейчас такие ошибочные записи просто пропускает и не обрабатывает, а в 2.5.1 будет падать с ошибкой преобразования, если там будут не только цифры.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Неявное преобразование типов

Сообщение dimitr » 20 дек 2011, 21:58

как минимум, это правильно :-) А лучше или хуже для вашего приложения - решать вам.

Ответить