Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

try .... except в SQL-синтаксисе   Найти похожие ветки 

 
Илайдж ©   (2003-12-02 11:30) [0]

Бодрое утро, страна.

Собственно, есть маленкая проблема.
Имеется поле varchar, в котором хранятся некие float данные. Вы спросите почему varchar? Отвечу, данные могут быть представлены в видах:
- float/float
- меньше float
- <= float
и т.д. и т.п.

Однако, возникла некая потребность вывести график по этим самым float-значениям.

Сейчас на клиенте висит нечто вида string->string, которое (да, кстати, значение может быть представлено как 4.5 и как 4,5)
а) рубит все слова в поле, пробелы
б) заменяет . на ,
в) из float/float берет первый float.
и т.д..

Но вот что интересно.
Такая штука как cast(varchar_field as float) проходит лишь там, где значение varchar_field представляет собой float.

А как быть с обработкой значений выше указанных видов? Ибо если в середине появится что-то что не вписывается в формат - обработка прекращается досрочно.

Буду благодарен за идеи.


 
Илайдж ©   (2003-12-02 11:37) [1]

сорри, не cast а convert

кстати, интересная штука в SQL Query Analyzer:


declare @x float
declare @y varchar
set @y = "4.5"
set @x = convert(float,@y)
print(@x)

Дает 4


declare @x float
declare @y varchar (4000)
set @y = "4.5"
set @x = convert(float,@y)
print(@x)

Дает 4.5


declare @x float
declare @y varchar (100)
set @y = "4,5" или set @y = "меньше 4.5"
set @x = convert(float,@y)
print(@x)

и все остальное, ессно, дает ошибку

Server: Msg 8114, Level 16, State 5, Line 4
Error converting data type varchar to float.

Вот как бы обойти это и скажем вместо ошибки на выходе был 0.0


 
Sandman25 ©   (2003-12-02 11:48) [2]

Напишите свою хранимую процедуру/функцию.


 
Hooch ©   (2003-12-02 12:00) [3]

чтоб проверить что строка - число используй ISNUMERIC и все дела.
> кстати, интересная штука в SQL Query Analyzer:

чего тут интересного ? в первом случае нужно длинну VarChar указать, по умолчанию 1


 
Silver Alex ©   (2003-12-02 12:10) [4]

а почему бы не сделать это поле вместо varchar numeric, и добавить еще одно поле например MainType типа Integer, где 0- это меньше float, 1- <= float, 2-это float/float
и т.д., если еще одно поле надо типа numeric (float/float) так добавь и его.Зачем хранить данные типа float в строке?Не догоняю.


 
Илайдж ©   (2003-12-02 13:54) [5]

2 Sandman25:
собсно проблема в том как это написать =)

пишу - основа

CREATE FUNCTION XX (@aa varchar(4000))
RETURNS float AS
BEGIN
declare @bb float
set @bb = convert(float, @aa)
return @bb
END

но если передать бред, ала @aa = "тест"
то в SQL Query Analyzer выдается ошибка, а хотелось бы видеть скажем 0
вопрос КАК это написать :)


 
Илайдж ©   (2003-12-02 14:30) [6]

оцените потугу

CREATE FUNCTION XX (@aa varchar(4000))
RETURNS float as
BEGIN
declare @i int
set @i = 0

while @i < len(@aa)
begin
set @i = @i + 1
if not substring(@aa, @i, 1) in ("0","1","2","3","4","5","6","7","8","9",".",",")
set @aa = replace(@aa, substring(@aa, @i, 1), " ")
end
set @aa = ltrim(rtrim(@aa))

set @i = patindex("% %",@aa)
if @i <> 0
set @aa = substring(@aa, 1, @i-1)
return convert(float,@aa)
END


Функция фозвращает первый нормальный float из списка..Собсно это и было нужно, просто я думал, что есть запись покороче
аля

function xx(@aa varchar)
declare @bb float
try
@bb = convert(float, @aa)
except
@bb = 0
end
return @bb
end

=)


 
SergSuper   (2003-12-02 14:43) [7]

function xx(@aa varchar)
RETURNS float as
declare @bb float
select @bb=case when isnumeric(@aa)=1 then convert(float, @aa) else 0 end
return @bb
end


 
Илайдж ©   (2003-12-02 14:49) [8]

2SergSuper: гуд, но в случае
- @aa = "<=5.2" вернет 0
- @aa = "5,2" - вылетит с ошибкой =)


 
Илайдж ©   (2003-12-02 14:50) [9]

Хотя я тебя понял, ты привел свой пример на [6].code2, за что отдельное спасибо.

Мда...стал сам себе противоречить =)



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
14-86561
Rouse_
2003-11-27 00:53
2003.12.26
Очепятки...


4-86603
Chris
2003-10-30 19:46
2003.12.26
Как отключить (извлечь) Flash memory card


1-86430
ASt
2003-12-13 16:11
2003.12.26
Как обработать минимизацию?


3-86242
Слэш
2003-12-04 11:48
2003.12.26
Как составить такой SQL запрос ?


1-86335
Dimaxx
2003-12-12 16:19
2003.12.26
Передача строки PChar в библиотеку