powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 9.02 Конвертация из numeric в String
16 сообщений из 16, страница 1 из 1
ASA 9.02 Конвертация из numeric в String
    #35494768
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поле типа numeric(14,4). Необходимо преобразовать это числовое значение в CHAR, при этом с форматом типа ###.#### (т.е. с отбрасыванием незначащих нулей справа после запятой, а в случае целочисленного значения - вообще без значений после запятой) - что-то вроде
Numeric(14,4) CHAR
345.0800 ---> 345.08
111.1000 ----> 11.1
45.0000 ----> 45

Есть ли быстрый способ?
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495521
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а чем обычный convert() не нравится?
Код: plaintext
select convert(char( 20 ),  45 . 0000 ) as aaa
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495542
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНу а чем обычный convert() не нравится?
Код: plaintext
select convert(char( 20 ),  45 . 0000 ) as aaa


Это работает в случае константы (45.0000 в Вашем примере). Но стоит заменить константу полем (например, select convert(char(20), num_value) as aaa) - не работает!
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495551
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, прошу прощения.
Вот, это сработает. Подключаешься к asademo и вперед.
Код: plaintext
1.
select EmployeeID, Salary, convert(char( 20 ), convert(double, Salary))
from Employees
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495566
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все ф-ии преобразования numeric(14,4) в строку оставляют конечные нули. Так что автор поста прав. Встроенных функций форматирования нет. Красивого безгемморойного способа сделать на сервере пока не видо, так что лучше бы это делать на клиенте.
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495581
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНу да, прошу прощения.
Вот, это сработает. Подключаешься к asademo и вперед.
Код: plaintext
1.
select EmployeeID, Salary, convert(char( 20 ), convert(double, Salary))
from Employees


Попробовал (правда не на ASADEMO, а на своей рабочей базе)...Но опять неувязочка..
Например значение 492.96 из поля таблицы преобразовывается в 492.9599999999999994
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495582
kuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIB White OwlНу а чем обычный convert() не нравится?
Код: plaintext
select convert(char( 20 ),  45 . 0000 ) as aaa


Это работает в случае константы (45.0000 в Вашем примере). Но стоит заменить константу полем (например, select convert(char(20), num_value) as aaa) - не работает!
как это не работает... функции вообще по барабану константа там или поле...
для примера
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 1 > create table num1(num numeric( 10 , 5 ))
 2 > go
 1 > insert into num1 values( 12 . 02000 )
 2 > go
( 1  row affected)
 1 > select * from num1
 2 > go
 num
 -------------
       12 . 02000 

( 1  row affected)
 1 > select convert(varchar( 5 ),num) from num1
 2 > go

 -----
  12 . 02 

( 1  row affected)
 1 >              
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495589
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuh TIB White OwlНу а чем обычный convert() не нравится?
Код: plaintext
select convert(char( 20 ),  45 . 0000 ) as aaa


Это работает в случае константы (45.0000 в Вашем примере). Но стоит заменить константу полем (например, select convert(char(20), num_value) as aaa) - не работает!
как это не работает... функции вообще по барабану константа там или поле...
для примера
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 1 > create table num1(num numeric( 10 , 5 ))
 2 > go
 1 > insert into num1 values( 12 . 02000 )
 2 > go
( 1  row affected)
 1 > select * from num1
 2 > go
 num
 -------------
       12 . 02000 

( 1  row affected)
 1 > select convert(varchar( 5 ),num) from num1
 2 > go

 -----
  12 . 02 

( 1  row affected)
 1 >              


А почему именно varchar(5) ? А если у меня в одной записи ну например 1234.76, а в другой 12.01 - как тогда отработает?
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495639
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuhкак это не работает... функции вообще по барабану константа там или поле...
для примераЧеловек спрашивает про ASA а не про ASE. Это разные СУБД, у них разное поведение. В ASA/SA действительно работа с константами немножко по другому идет чем с полями.

TIBА почему именно varchar(5) ? А если у меня в одной записи ну например 1234.76, а в другой 12.01 - как тогда отработает?Он принцип показывал а не реальную задачу решал. Хочешь увеличить количество знакомест - увеличивай.
И повнимательнее пожалуйста нажимай кнопку "Опубликовать", твои сообщения опять двоятся.
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35495727
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот рабочий способ, конкретно для этого случая, но лего модифицируется под нумерик более с другим кол-вом знаков после запятой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin
declare @i numeric( 14 , 4 );
set @i= 55 . 01 ;

select ( 
	CASE locate( string(@i)+'0000', '0000',  1  )
		WHEN length(string(@i)) then left(string(@i), length(string(@i))- 1 )
		WHEN length(string(@i))- 1  then left(string(@i), length(string(@i))- 2 )
		WHEN length(string(@i))- 2  then left(string(@i), length(string(@i))- 3 )
		WHEN length(string(@i))- 3  then left(string(@i), length(string(@i))- 5 )		
		ELSE string(@i)
	END 
	) as aa;

end

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35496669
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так как, помогло?
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35496699
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldВот рабочий способ, конкретно для этого случая, но лего модифицируется под нумерик более с другим кол-вом знаков после запятой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin
declare @i numeric( 14 , 4 );
set @i= 55 . 01 ;

select ( 
	CASE locate( string(@i)+'0000', '0000',  1  )
		WHEN length(string(@i)) then left(string(@i), length(string(@i))- 1 )
		WHEN length(string(@i))- 1  then left(string(@i), length(string(@i))- 2 )
		WHEN length(string(@i))- 2  then left(string(@i), length(string(@i))- 3 )
		WHEN length(string(@i))- 3  then left(string(@i), length(string(@i))- 5 )		
		ELSE string(@i)
	END 
	) as aa;

end

все наши на www.corba.kubsu.ru

Отлично работает. Спасибо!
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35497681
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIBОтлично работает. Спасибо!А что, convert() не понравился?
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35497716
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl TIBОтлично работает. Спасибо!А что, convert() не понравился?

Дак ведь не удалось решить проблему с помощью convert...
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35497803
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIBДак ведь не удалось решить проблему с помощью convert...А... прошу прощения, не заметил пост с напоминанием что double теряет точность.
Вообще-то, подобные задачи надо возлагать на клиента. Но если очень надо делать внутри ХП, то пожалуй решение предложенное Ggg_old будет самым надежным.
...
Рейтинг: 0 / 0
ASA 9.02 Конвертация из numeric в String
    #35498393
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если часто используешь, то лучше оформить через функцию, вызываемую из dll, гораздо быстрее будет работать...
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 9.02 Конвертация из numeric в String
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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