Страница: 1 |
Вопрос: запрос на деление | Добавлено: 13.07.07 09:11 |
Автор вопроса: ![]() |
Здравствуйте!
Имеется запрос: INSERT INTO Таблица2 ( Слово8 ) SELECT (Слово6)\(Слово7) AS Слово8 FROM Таблица2; Запрос выполняется правильно. Но как только в знаменателе (поле Слово7) оказывается большее число чем в числителе (Слово6), запрос выполняется с нулевым результатом, т.е. в Таблица2.Слово8 выводится 0, а должно быть например 0,2, 0,03 и т.п. Подскажите пожалуста, в чем тут дело. Заранее благодарен. |
Ответы | Всего ответов: 14 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #1 | Добавлено: 13.07.07 11:11 |
/ |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #2 | Добавлено: 13.07.07 17:43 |
Если заменить \ на / т.е.
INSERT INTO Таблица2 ( Слово8 ) SELECT (Слово6) / (Слово7) AS Слово8 FROM Таблица2; ничего не меняется - если Слово6 больше Слово7, то считает, если Слово6 меньше Слово7, то запрос выполняется, но в таблицу вносится "0" вместо реального числа. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #3 | Добавлено: 13.07.07 17:50 |
даже если сделать просто запрос
SELECT Таблица2.Слово6 \ Таблица2.Слово7 FROM Таблица2; то наблюдается та же проблема |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #4 | Добавлено: 13.07.07 18:09 |
тип данных СловоX - double? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #5 | Добавлено: 13.07.07 18:25 |
Может проверить разделитель целой части от дробной? |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #6 | Добавлено: 13.07.07 18:36 |
типа реплейс запятую на точку? |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #7 | Добавлено: 13.07.07 19:04 |
Все поля в таблице числовые
насчет репрлейса не понял - поясни |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #8 | Добавлено: 13.07.07 19:40 |
Понятно что числовые, но тип данных этим не ограничивается. Если речь идет об ACCESS(хотя не уточнялось, что за база данных), то в конструкторе таблиц есть закладка "Общие/Размер поля". Странно ожидать при заданном "длинном целом" - дробное число.
Насчет replace, ну вот, например: Во мне сейчас четыре нольпятых хольстена. их можно написать как "4*0,5" или как "4*0.5". Replace( '4*0,5' , ',' , '.' ) - ищем в строке запятую, и меняем на точку. Но что HACKER имел ввиду под проверкой разделителя... ![]() Может replace((Слово6) / CDbl(Слово7), ',' , '.' ) ? А может и нет. даже если сделать просто запрос
SELECT Таблица2.Слово6 \ еще раз: / '! |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 326066673 Вопросов: 368 Ответов: 5968 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 13.07.07 20:02 |
Если аргументы целочисленные, то можно попробовать сконвертить их
перед операцией в float. Вроде такого: SELECT CONVERT(float, Слово6) / CONVERT(float, Слово7) AS Слово8 или SELECT CAST(Слово6 AS float) / CAST(Слово7 AS float) AS Слово8 Правда не знаю, насколько это универсальное решение, но в SQL Server должно работать. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #10 | Добавлено: 13.07.07 20:22 |
2EUGY: на счет размера и формата поля - об этом я подумал в первую очередь и перепробовал все варианты - один фиг тоже
\ / менял в обохих запросах - один фиг реплейс - не совсем понял, как должен выглядеть запрос в моем случае 2Павел - проверил твой вариант - не работает |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #11 | Добавлено: 13.07.07 20:25 |
гдето встречал такое выражение "тип поля - дробный", не могу найти - может это поможет, поскольку понимаю, что числовое поля округляет до 0? |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #12 | Добавлено: 13.07.07 20:36 |
насколько понимаю должно быть "одинарное с плавающей точкой" - поставил - не работает |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #13 | Добавлено: 13.07.07 21:12 |
Нет наглядности и трудно посоветовать что-то.
Хотя все вроде-бы просто. INSERT INTO Таблица2 ( Слово8 ) SELECT Слово6 / Слово7 FROM Таблица2 ...; Если в базе данных тип поля Таблица2.Слово8 с плавающей точкой, то даже при целых типах Слово6 & Слово7 запрос занесет результат правильно. P.S. ... As Слово8 только сбивает с толку. К слову8 в таблице2 это не имеет отношения.
|
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 31 |
Профиль | Цитата | #14 | Добавлено: 13.07.07 21:57 |
Со всем разобрался - дело как обычно в невнимательности (в данном случае моей). теперь все работает. Спасибо. |
Страница: 1 |
|