-
> Вариант (07.07.2009 14:11:16) [16]
Умножить можно, но не известно на сколько.
-
>topS (07.07.09 15:02) [19] как они хранят десять валенок(ов?) - мне неведомо если подходить строго математически, то сказано было четко - дробная часть их(валенок) кол-во
>Вариант (07.07.09 14:11) [16] не читатель?
-
> Кщд (08.07.09 05:42) [21]
Писатель? > Anatoly Podgoretsky © (07.07.09 15:58) [20]
Понятно, если это так. Но я вижу код > Ольга © (07.07.09 12:53) [13]
substring(cast(val2 as varchar(20)),CHARINDEX('.',cast(val2 as varchar(20)))+1,2) , где после запятой берется 2 символа - то есть количество вроде как от 0 до 99. Умножить на 100 в этом случае... А будет до 1000, ну будут умножать на 1000 и т.д. Хотя в общем согласен с > Anatoly Podgoretsky © (07.07.09 12:16) [8]
-
>Вариант (08.07.09 07:26) [22] ветку-то недосуг прочитать перед тем, как постить?
>substring(cast(val2 as varchar(20)),CHARINDEX('.',cast(val2 as >varchar(20)))+1,2) в MS SQL разделитель не зависит от локали?
-
> в MS SQL разделитель не зависит от локали?
Данные хранятся с точкой. Запятая используется только для отображения (в зависимости от локали). > substring(cast(val2 as varchar(20)),CHARINDEX('.',cast(val2 > as varchar(20)))+1,2) , где после запятой берется 2 символа > - то есть количество вроде как от 0 до 99
Да, здесь моя ошибка. Я не знаю сколькозначная цифра может встретиться после запятой (двойку поставила, визуально оценив несколько страниц - вроде цифры маленькие). Пример в [15] работает правильнее, хоть и выраженьице получается тоже не особо удобоваримое, ну да бог с ним, SQL-сервер переварит. > сделай вложенный запрос и не парься
Попыталась, запарилась. Запрос из одной таблицы. Даже если объединить ее саму с собой, все равно во WHERE нужна связка по табуреткам и валенкам. Или я не поняла идеи. Привожу окончательный код:
IF object_id('tempdb..#tmp') is not null DROP TABLE #tmp
CREATE TABLE #tmp(val2 float)
INSERT INTO #tmp VALUES (-956.5)
INSERT INTO #tmp VALUES (959.449)
SELECT ABS(cast(ROUND(val2,0,1) as int)),
cast((abs(val2) - ABS(cast(ROUND(val2,0,1) as int))) * power(10, len(cast(abs(val2) -
ABS(cast(ROUND(val2,0,1) as int)) as varchar(20)))-2) as int)
FROM #tmp
WHERE cast((abs(val2) - ABS(cast(ROUND(val2,0,1) as int))) * power(10, len(cast(abs(val2) -
ABS(cast(ROUND(val2,0,1) as int)) as varchar(20)))-2) as int) BETWEEN 1 AND 10
OR
cast((abs(val2) - ABS(cast(ROUND(val2,0,1) as int))) * power(10, len(cast(abs(val2) -
ABS(cast(ROUND(val2,0,1) as int)) as varchar(20)))-2) as int) > 50
Всем огромное спасибо за помощь!
-
> Ольга (08.07.2009 09:03:24) [24]
Ответь на вопрос, как точно хранится 1 валенок и 10 валенок
-
> Ольга © (08.07.09 09:03) [24]
и всё же, почему вдруг -956.5 это 5 валенок, а не 500? и как 'изобразить' эти самые 500 валенок? и почему устраивает, если 959.499999 это 499999 валенка, а 959.4999999 это 4 валенка?
-
> Кщд (08.07.09 08:27) [23]
иии ??? Я где-то об этом упоминал?
Наверное ты хочешь сказать, что твой вариант единственно верный и нужный? С уважением к твоим знаниям и не собираясь отнять лавры первого помогшего, я просто привел свой вариант, без длинных cast. И даже не полный вариант, а только как "подумать" для автора вопроса. Ей понравился твой - я рад за тебя.
> Ольга © (08.07.09 09:03) [24]
> Да, здесь моя ошибка. Я не знаю сколькозначная цифра может > встретиться после запятой
Тогда задача не решаема. Или надо передавать хотя бы количество значащих цифр параметром в запрос.
-
> Вариант (08.07.09 09:19) [27]
Хотя правильней - это знать ответы на вопросы
> Anatoly Podgoretsky © (08.07.09 09:13) [25]
> topS (08.07.09 09:16) [26]
-
Задача имеет решение только для чисел не оканчивающихся на НОЛЬ и то частичное, поскольку float имеет относительную точность и абсолютное большинство чисел можно представить только приблизительно. Следует также добавить, что любые операции с числами меняют эту точность.
-
> Так у заказчика хранятся данные (таблица создана до рождения > Билла Гейтса): целая часть - количество "табуреток", дробная > - количество "валенок". Делаю нормальную БД, нужно перенести > данные.
Если у заказчика есть бумажная база, то надо просто заставить ввести валенки вручную
-
>Вариант (08.07.09 09:19) [27] какие лавры? о чем Вы?) >Кщд (07.07.09 12:20) [11]
-
> Кщд (08.07.09 09:42) [31]
Значит я не понял о чем ты. Задай вопрос еще раз, только что бы мне не пришлось угадывать смысл, есть какие-то замечания -напиши, аргументируй - отвечу.
-
В эту таблицу пишет некий фортрановский модуль, и пишет аккуратно (видимо с округлением). Так что цифр с периодом в дробной части в ней нет. 956.5 - 5 валенков 956.50 - 50 валенков Если встретится 0.4999 - видимо, будет 4999 валенков (но такого пока не встречалось).
> Если у заказчика есть бумажная база, то надо просто заставить > ввести валенки вручную
Нашего Заказчика замучаешься заставлять... А вот бабок за эту работу можно неплохо срубить :)
-
> 956.50 - 50 валенков
Написала это пример с потолка, потом поняла, что во float .50 не записать. Народ, каюсь - все остальные поля, коих немерено в этой таблице, float, а одно это поле sql_variant. Простите, что ввела в заблуждение.
-
> Ольга (08.07.2009 13:37:33) [33]
Для чисел, что ,5 что ,5000 это одно и тоже и нельзя различить. Существует вариант прямой, извращеной записи прямо в файл таблицы, но это врядли, вероятнее это поле не Float/Number
-
> Ольга © (08.07.09 13:51) [34]
"Просто хочется рвать и метать!" (c) Бывалов из х/ф "Волга-Волга" :-)
-
> Вариант (08.07.09 14:09) [36]
Посыпаю голову пеплом...
-
> Ольга (08.07.2009 13:51:34) [34]
Тогда хуже, поскольку там может быть что угодно, включая пользовательские типы.
-
> Так у заказчика хранятся данные (таблица создана до рождения > Билла Гейтса): целая часть - количество "табуреток", дробная > - количество "валенок". Делаю нормальную БД, нужно перенести > данные.
И вряд ли это из-за низкой квалификации, судя по последним данным квалификация высокая.
|