![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IB. Формирование запроса с расчетом данных по 1 - ой колонке [D6, Win95/98]
erika © (2005-07-29 08:24:00)Здравствуйте!
Возникла проблема: когда я формирую VIEW 3 (на основе двух других VIEW и Table1 - вызываются все поля таблицы удовлетворяющие условию), где производится расчет следующего типа (view1.field1 - view1.field2 - view2.field1 ) field3, и если ранее view1.field1 было null, то field3 получается пустым, и запрос выполняется очень долго, не смотря на то, что в результате запроса появляется всего 100 - 150 записей, максимум 200
Lexer (2005-07-29 12:36:00) [1]> Fay © (29.07.05 12:32) [37]
см. [25]
> Johnmen © (29.07.05 12:31) [36]
>А в целом, не надо путать проблемы отображения и хранения.
>Первые - удел приложения. И не имеют НИКАКОГО отношения ко вторым.
Согласен, у меня так и реализовано, хранение здесь, как и должно быть - в числовом формате, отображение - строка
Fay (2005-07-29 12:35:00) [2]2 Johnmen © (29.07.05 12:31) [36]
На самом деле, в 1-м диалекте есть нули. Не знал. Теперь знаю, но мне пофиг 8)
Lexer (2005-07-29 12:33:00) [3][35] Fay © (29.07.05 12:30)
аналогично
странно...
может зависит от диалекта, у меня первый
Fay (2005-07-29 12:32:00) [4]2 Lexer © (29.07.05 12:29) [34]
Я возился с IB ещё с 4-й версии и ни разу не видел такого фокуса. М.б. забыл...
Johnmen (2005-07-29 12:31:00) [5]>Lexer © (29.07.05 12:20) [31]
Никаких подстав нет.
Много нулей - это значит у тебя 1 диалект. Так и д.б.
12.00 - это значит 3 диалект, так и д.б.
А в целом, не надо путать проблемы отображения и хранения.
Первые - удел приложения. И не имеют НИКАКОГО отношения ко вторым.
Fay (2005-07-29 12:30:00) [6]2 Lexer © (29.07.05 12:29) [34]
Firebird-1.5.2.4731-Win32
Lexer (2005-07-29 12:29:00) [7][33] Fay © (29.07.05 12:25)
СУБД какая?
Fay (2005-07-29 12:25:00) [8]2 Lexer © (29.07.05 12:20) [31]
MSSQL вернул то же самое.
Fay (2005-07-29 12:23:00) [9]2 Lexer © (29.07.05 12:20) [31]
12.00
Но не 12.0000000
Lexer (2005-07-29 12:20:00) [10]Можно взглянуть на эту базу - исключено
backup metadata only - исключено
Лучше, конечно, с данными - смешно
да и смысл какой, выполни у себя вот это:
SELECT CAST(CAST(12 AS NUMERIC(15,2)) AS VARCHAR(20))
FROM Любая_таблица
и всё будет понятно.
зы: поубивал бы разработыиков IB6, FB за такую подставу.
Fay (2005-07-29 12:16:00) [11]2 Lexer © (29.07.05 12:13) [29]
Можно взглянуть на эту базу?
Меня вполне бы устроил backup metadata only с одной этой таблой. Лучше, конечно, с данными. OK?
Lexer (2005-07-29 12:13:00) [12]> Fay © (29.07.05 12:08) [28]
> Мне ни разу не удавался такой фокус. IBExpert так же возвращает?
да!
Кстати, я писал уже об этой проблеме, говорят и IB 6 также возвращает, и самое страшное то, что я заметил это только после миграции, этого я ни нашел ни в одной статье и доке.
Fay (2005-07-29 12:08:00) [13]2 Lexer © (29.07.05 11:57) [27]
Мне ни разу не удавался такой фокус. IBExpert так же возвращает?
Lexer (2005-07-29 11:57:00) [14][26] Fay © (29.07.05 11:51)
>> Может это тоже моя ошибка?
>Несомненно!
неужели...
> Не понимаю
что тут не понятного? надо перевести несколько числовых полей в строку с рузделителями
> 1) каким образом число вдруг становится строкой?
CAST (число AS VARCHAR(20))
> 2) чему Вы улыбаетесь?
действительно, здесь плаать надо, столкнтесь с такой проблемой, поймете
Fay (2005-07-29 11:51:00) [15]2 Lexer © (29.07.05 11:49) [25]
>> Может это тоже моя ошибка?
Несомненно!
Не понимаю
1) каким образом число вдруг становится строкой?
2) чему Вы улыбаетесь?
Lexer (2005-07-29 11:49:00) [16]Сложность была вот в чем:
есть поля типа Numeric(15,2)
Поле1 = 1.12
Поле2 = 2
Поле3 = 3.1
Поле4 = 1
Поле5 = 0
Надо получить из строчку : '1.12/2/3.1/1/0'
В IB5 было все прекрасно, но в FB, полный бардак:
1.12000000/2.0000000/3.10000000/1.0000000/0.0000000000
Пришлось извращаться чтоб привести к нормальному виду
Может это тоже моя ошибка? =)
Fay (2005-07-29 11:48:00) [17]2 Lexer © (29.07.05 11:42) [23]
Как это связано с миграцией?
Lexer (2005-07-29 11:42:00) [18]>Еще были роблемы при преобразовании NUMERIC в CHAR(VARCHAR) - получалось так что 1 показывался как 0000001 после преобразования в строку, нули добивались до длины строки.
Извиняюсь, я ошибся, нолями строка добивается конечно же после цифры, т.е. 1 -> 1.0000000000000.
Вот наглядный пример:
SELECT CAST(CAST(112 AS NUMERIC(15,2)) AS VARCHAR(20))
FROM Любая_таблица
Johnmen (2005-07-29 11:28:00) [19]>Lexer © (29.07.05 11:13) [21]
Интуичить надо было ! :)))
И по поводу нумерик в чар - это что ?
Lexer (2005-07-29 11:13:00) [20]Johnmen © (29.07.05 11:03) [20]
Всё сказанное всё-таки говорит об упущениях и ошибках при проектировании...
Это смешно и глупо!!!
Откуда я мог знать 3 года назад, используя IB 5, что придумают такую вещь как FireBird, а в нем нельзя будет использовать каких-то имен, и появятся новые ограничения.
Например: сейчас у меня есть таблица EMPLOYEE, а в следующих версиях это слово будет зарезервировано СУБД, и предется менять её название, это что моя ошибка?