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

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


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


Попробовал (правда не на ASADEMO, а на своей рабочей базе)...Но опять неувязочка..
Например значение 492.96 из поля таблицы преобразовывается в 492.9599999999999994
...
Рейтинг: 0 / 0
19.08.2008, 17:35
    #35495582
kuh
kuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
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
19.08.2008, 17:40
    #35495589
TIB
TIB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
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
19.08.2008, 17:59
    #35495639
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
kuhкак это не работает... функции вообще по барабану константа там или поле...
для примераЧеловек спрашивает про ASA а не про ASE. Это разные СУБД, у них разное поведение. В ASA/SA действительно работа с константами немножко по другому идет чем с полями.

TIBА почему именно varchar(5) ? А если у меня в одной записи ну например 1234.76, а в другой 12.01 - как тогда отработает?Он принцип показывал а не реальную задачу решал. Хочешь увеличить количество знакомест - увеличивай.
И повнимательнее пожалуйста нажимай кнопку "Опубликовать", твои сообщения опять двоятся.
...
Рейтинг: 0 / 0
19.08.2008, 18:41
    #35495727
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
Вот рабочий способ, конкретно для этого случая, но лего модифицируется под нумерик более с другим кол-вом знаков после запятой:
Код: 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
20.08.2008, 12:30
    #35496669
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
Ну так как, помогло?
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
20.08.2008, 12:39
    #35496699
TIB
TIB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
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
20.08.2008, 17:43
    #35497681
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
TIBОтлично работает. Спасибо!А что, convert() не понравился?
...
Рейтинг: 0 / 0
20.08.2008, 17:57
    #35497716
TIB
TIB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9.02 Конвертация из numeric в String
White Owl TIBОтлично работает. Спасибо!А что, convert() не понравился?

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


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