powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вырезать дробную часть числа.
14 сообщений из 14, страница 1 из 1
Вырезать дробную часть числа.
    #34549105
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Посоветуйте, пожалуйста, как мне решить такую проблему.
Есть переменная @L - число объявленное как Decimal(25,3).Нужно вырезать из него целую и дробную часть. Целую часть мне вырезать удалось, а вот дробную пока нет.
Можно, конечно, перевести это число в тип varchar и его ковырять, но у меня так не получилось.

P.S. может функция есть какая недокументированная?
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549123
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Здравствуйте. Посоветуйте, пожалуйста, как мне решить такую проблему.
Есть переменная @L - число объявленное как Decimal(25,3).Нужно вырезать из него целую и дробную часть. Целую часть мне вырезать удалось, а вот дробную пока нет.
Можно, конечно, перевести это число в тип varchar и его ковырять, но у меня так не получилось.

А отнять о числа "верезанную целую часть" не пробовали ?
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549125
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дробная = все число - целая часть, это если без привлечения функций
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549188
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryА отнять о числа "верезанную целую часть" не пробовали ?

Побовал - это первое, что пришло мне на ум. Однака мне надо чтобы например при @L=4551.6
В переменную @L1 забилось значение 4551, а в переменную @L2 забилось значение 6 (но не как не 0.6) !
Пробовал с переводом в varchar баловаться. И вот сложности: если @L =4551.6 , то
SELECT cast(@L,varchar) выдаст 4551.600 (правильно 3 знака после запятой объявлено в переменной) и как с ним быть я не сооброжу. Если бы подсказали такой перевод, чтобы выдавал 4551.6 был бы очень благодарен.
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549210
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81 GloryА отнять о числа "верезанную целую часть" не пробовали ?

Побовал - это первое, что пришло мне на ум. Однака мне надо чтобы например при @L=4551.6
В переменную @L1 забилось значение 4551, а в переменную @L2 забилось значение 6 (но не как не 0.6) !

Интересная логика, а при 4551.06, что должно быть в @L2 ?
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549220
Фотография BugsBunny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
declare @x decimal( 25 , 3 ); set @x =  4551 . 6 
select round(@x,  0 ,  1 ), @x - round(@x,  0 ,  1 )
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549235
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
SELECT cast(@L,varchar) выдаст 4551.600 (правильно 3 знака после запятой объявлено в переменной) и как с ним быть я не сооброжу. Если бы подсказали такой перевод, чтобы выдавал 4551.6 был бы очень благодарен.
С этим надо бороться в клиентском приложении. Через задание какиз-нибудь масок отображения
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549301
Фотография BugsBunny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81...
P.S. может функция есть какая недокументированная?
Apparently, 2005 had convert style 128 ( "To remove trailing zeros from a result set when you convert from numeric or decimal data to character data, use the value 128 for style. ") but it wasn't working (Bug ID :FDBK48122) and the BOL was fixed rather than source code.

And I totaly agree with Glory that presentation should be done on client.
BTW, look how ugly it can be done on TSQL:
Код: plaintext
1.
2.
3.
declare @x decimal( 25 , 3 ); set @x =  4551 . 6 
select cast(cast(round(@x,  0 ,  1 ) as int) as varchar( 25 )) 
    + '.' 
    +  reverse(cast(round(reverse(cast(@x - round(@x,  0 ,  1 ) as varchar( 25 ))), 0 , 1 ) as varchar( 25 )))
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549309
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSELECT cast(@L,varchar) выдаст 4551.600 (правильно 3 знака после запятой объявлено в переменной) и как с ним быть я не сооброжу. Если бы подсказали такой перевод, чтобы выдавал 4551.6 был бы очень благодарен.

а зачем ВЫ вообще к строке приводите числовые данные, на которые можно формат отображения наложить?!
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549745
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory
С этим надо бороться в клиентском приложении. Через задание какиз-нибудь масок отображения

Боролся если бы это клиентовское приложение было бы написано мной или я бы хотябы имел исходный код на Центуре, а оно написано именно на Центуре. Кстати, вы умеете программировать на Центуре? Просто "МЕГАРАСПРОСТРАНЕННОЕ" средство разработки! :)
А в данном случае все, что я могу сделать это повесить триггер на добавление новой строчки в определенной таблице.
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #34549793
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory
Интересная логика, а при 4551.06, что должно быть в @L2 ?

А вот тут действительно Glory несомненно прав(а).
Я об этом не подумал и всех ввел в заблуждение. у меня вводится таблица в некотором закрытом клиентовском приложении, туда пользователь вносит числа типа Decimal(25,3). Но он вносит числа в одних единицах измерения, а мне надо в других(причем чтобы перевести в другие единицы надо отковырять данные из базы). Вот я и решил повесить триггер который будет автоматом переводить в эти единицы измерения.
А что касается чисел 4551.06 то их ползователь не должен вводить.Код BugsBunny действительно помог.
Спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вырезать дробную часть числа.
    #39713559
ToOch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть 2 поля DATETIME, но в одном время, в другом дата:
[Date Archived] = '2018-09-10 00:00:00.000'
[Time Archived] = '1754-01-01 17:47:21.960'
Встал вопрос объединения этих полей в одно. Исходя из соображений, что время это дробная чать числа, я ничего умнее не придумал как написать следующее.

[Date Archived]+CAST([Time Archived] AS FLOAT)-FLOOR(CAST([Time Archived] AS FLOAT))

Думаю, с точки зрения производительности это решение "неОчень", но результат следующий:
[DateTime Archived] = '2018-09-10 17:47:21.963'
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #39713568
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ToOch,

datetimefromparts()
...
Рейтинг: 0 / 0
Вырезать дробную часть числа.
    #39713596
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ToOch,

Код: sql
1.
[Date Archived]+CAST([Time Archived] AS TIME)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вырезать дробную часть числа.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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