Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
Здравствуйте, други!

Пользователю в лом смотреть на лишние нули. Есть таблица с полем Numeric(25,4). Как при запросе отсечь лишние конечные нули, чтобы получилось следующее:

в таблице: 234,3400
124,3000
1245,1250

в результате запроса должно быть:
234,34
124,3
1245,125

Извиняюсь если это просто, но поиском ничего не нашлось.
23 дек 03, 16:10    [471077]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Пользователю в лом смотреть на лишние нули


А пользователь у вас через что смотрит на эти лишнии нули? Вот в этом средстве и форматируйте, применить, обычный числовой формат, например:

#,##0.####
23 дек 03, 16:12    [471082]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
Пользователь смотрит через VFP и к сожалению в нем нет такого формата(маски). Это я первым делом пытался сделать.
23 дек 03, 16:16    [471098]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Пользователь смотрит через VFP и к сожалению в нем нет такого формата(маски


Правда, что-ли? А то в соседнем форуме с пеной у рта доказывают, что фокс рулез форева.
23 дек 03, 16:19    [471112]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
pavelkhr
Guest
попробуй так
select convert(decimal(25,2), 123.3400 ,0)
23 дек 03, 16:23    [471122]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
Есть много различных масок, но именно с такой функцией нет. И что-то непохоже, что приведенная Вами маска выполняла такую функцию.

А фокс, как и все другие средства разработки, имеет свои преимущества и свои недостатки. Просто надо правильно выбирать средство для задачи.
23 дек 03, 16:29    [471139]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
И что-то непохоже, что приведенная Вами маска выполняла такую функцию.


Ну почему же, в дельфи как раз будут убраны незначащие нули и добавлен разделитель разрядов, и для чисел меньше единицы будет 0 перед разделителем целой и дробной части.
23 дек 03, 16:35    [471159]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Приведенный пример ничего не говорит. Это не формат, чтобы распространить на все случаи.
2 pkarlin
Можно ли резултат SELECT а вывести в формате ( Удалить нули справа )
23 дек 03, 16:39    [471168]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
To Pavelkhr:

Не подходит, оставляет два последних нуля.

To pkarklin:

Рулез. В Фоксе такого нет. Может в запросе как-нить извратиться можно?
23 дек 03, 16:42    [471176]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Это не формат, чтобы распространить на все случаи


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

автор
Можно ли резултат SELECT а вывести в формате


Если тока преобразовать к строке и убрать справа нули. Другие числовые форматы все равно будут иметь незначащие нули.
23 дек 03, 16:43    [471178]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
автор
Если тока преобразовать к строке и убрать справа нули. Другие числовые форматы все равно будут иметь незначащие нули.


Так это и нужно. Только как в запросе убрать справа незначащие нули?
23 дек 03, 16:45    [471186]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
Ну так что, ни у кого никаких мыслей нет?
23 дек 03, 18:47    [471383]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Ты о том, есть ли у кого-нить мысли по поводу того, как убрать из СТРОКИ нули? Почитай про SUBSTRING для начала...Потом можно перейти к более "тяжелым" статьям...
23 дек 03, 18:50    [471384]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
Да знаю я про SUBSTRING, не подойдет тут он. Либо я так туп, что не могу его применить, поэтому и прошу помошь зала. Уж не взыщите, мож одну строчку кинете, если это через SUBSTRING решается.
23 дек 03, 19:07    [471408]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
V. Motchulsky
Guest
В SQL2000 можно создать пользовательскую функцию, там и обработать строку.
23 дек 03, 19:12    [471416]     Ответить | Цитировать Сообщить модератору
 Ну, вот так, например  [new]
TSasha
Member

Откуда:
Сообщений: 10
не воспринимйте серьезно только, работать должно оченьмедленно ИМХО

select substring(cast(n as varchar(25)),1, patindex('%0000', cast(n as varchar(25)))-2) from num where patindex('%0000', cast(n as varchar(25)))>0
union
select substring(cast(n as varchar(25)),1, patindex('%[^0]000', cast(n as varchar(25)))) from num where patindex('%[^0]000', cast(n as varchar(25)))>0
union
select substring(cast(n as varchar(25)),1, patindex('%[^0]00', cast(n as varchar(25)))) from num where patindex('%[^0]00', cast(n as varchar(25)))>0
union
select substring(cast(n as varchar(25)),1, patindex('%[^0]0', cast(n as varchar(25)))) from num where patindex('%[^0]0', cast(n as varchar(25)))>0
union
select cast(n as varchar(25)) from num where patindex('%0', cast(n as varchar(25)))=0
23 дек 03, 20:47    [471506]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5637
плохо для чисел количество цифр после запятой плавающее... глаза разбегаются... хы

для спящего время бодрствования равносильно сну
23 дек 03, 20:53    [471508]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5637
stuff(@float, charindex(',', @float), 100, '')

для спящего время бодрствования равносильно сну
23 дек 03, 20:56    [471510]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5637
reverse(stuff(reverse(@float), 1, patindex('[123456789]', reverse(@float))-1, ''))



для спящего время бодрствования равносильно сну
23 дек 03, 21:02    [471513]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
ququ
Member

Откуда: ухожу, ухожу, ухожу...
Сообщений: 113
2 kost
Странные у вас пользователи... Мне наоборот, встречались "аккуратисты", им больше нравилось
 234,3400

124,3000
1245,1250
тогда все красиво и понятно - где большое число, а где маленькое.
24 дек 03, 07:25    [471649]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Aleksey777
Member

Откуда: Novosibirsk
Сообщений: 227
наверно так
declare @t table (n numeric(25,4))

insert into @t values(234.3400)
insert into @t values(124.3000)
insert into @t values(1245.1250)
select n, convert(float,n) from @t
24 дек 03, 07:32    [471652]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Aleksey777
Member

Откуда: Novosibirsk
Сообщений: 227
конечно для сильно больших чисел не пойдет, но как вариант
24 дек 03, 07:34    [471653]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
Aleksey777
Member

Откуда: Novosibirsk
Сообщений: 227
нет, наверно совсем не пойдет :-)
24 дек 03, 07:37    [471654]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
2All
может я чего-то не понимаю, но может быть такого, чтобы в ФОКСе
нельзя было вывести число в нужном формате.
ИМХО: Работать с числами как со строками - извращение...
(список вариантов можно наблюдать выше... без обид..)

Хотя была такая беда в Аксессе97, когда поля НУМЕРИК он преобразовывал
в строку... :( Приходилось делать в запросе что-то вроде:
cast(POLE as float) где: POLE типа НУМЕРИК

Может это Ваш случай ???
24 дек 03, 12:51    [472159]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе отсечь лишние нули 123,300 -> 123,3 или 234,340 -> 234,34  [new]
kost
Member

Откуда:
Сообщений: 25
To Алексей2003:

Вариант:
автор
stuff(@float, charindex(',', @float), 100, '')

не пойдет т.к. отсекает все, что после запятой.

Вариант:
автор
reverse(stuff(reverse(@float), 1, patindex('[123456789]', reverse(@float))-1, ''))

тоже не пойдет, т.к. если даже предположить что конструкция patindex('[123456789]', reverse(@float)) находит в строке @float позицию, где впервые встречается любой из символов 123456789 (чему не нашел подтверждения в доках), то все равно данный вариант не будет работать в случае если @float=134500,0000 или @float=13450,0000 и т.д. Вот если заменить на [123456789,], то наверное прокатит, но пока не получаться запустить данную конструкцию. Может чего не понимаю. Объясни пожалуйста, что означает: patindex('[123456789]', reverse(@float)) ?
24 дек 03, 13:04    [472178]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить