Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как определить можно ли строку конвертировать в число?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
есть большая процедура, в ней входящая строка преобразуется в real.
как определить, что строка может быть преобразована, чтобы процедура не вылетала с ошибкой
преобразования?

declare @r real
declare @s nvarchar(36)
set @s = N'1.233434601062400e+013' -- если так N'1,233434601062400e+013' - ошибка
set @r = cast(@s as real)
select @s, @r
26 май 09, 13:20    [7228178]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
declare @r real
declare @s nvarchar(36)
set @s = N'1,233434601062400e+013'
set @r = cast(replace(@s, ',', '.') as real)
select @s, @r
26 май 09, 13:22    [7228201]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
declare @r real
declare @s nvarchar(36)
set @s = N'1.233434601062400e+013' -- если так N'1,233434601062400e+013' - ошибка
SET @r = CAST(CASE WHEN ISNUMERIC(@s)=1 AND @s LIKE '%[0-9]%' AND @s NOT LIKE '%[^-+.eE 0-9]%' THEN @s END AS REAL);
select @s, @r
На максимальную величину real надо ещё проверять
26 май 09, 13:26    [7228234]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
tpg
declare @r real
declare @s nvarchar(36)
set @s = N'1,233434601062400e+013'
set @r = cast(replace(@s, ',', '.') as real)
select @s, @r
+1
declare @r real
declare @s nvarchar(36)
set @s = N'1.233434601062400e+013' -- если так N'1,233434601062400e+013' - ошибка
SET @r = CAST(CASE WHEN ISNUMERIC(REPLACE(@s,',','.'))=1 AND @s LIKE '%[0-9]%' AND REPLACE(@s,',','.') NOT LIKE '%[^-+.eE 0-9]%' THEN REPLACE(@s,',','.') END AS REAL);
select @s, @r
26 май 09, 13:28    [7228253]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
iap,

спасибо!
26 май 09, 13:29    [7228267]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
Denis A.
Member

Откуда: Челябинск
Сообщений: 353
Winnipuh,

Есть функция is_numeric:

if is_numeric(@mystring)<>1 raiserror(16,1,'Щито щито?')
26 май 09, 14:07    [7228622]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Denis A.
Winnipuh,

Есть функция is_numeric:

if is_numeric(@mystring)<>1 raiserror(16,1,'Щито щито?')


точно, спасибо
26 май 09, 14:08    [7228625]     Ответить | Цитировать Сообщить модератору
 Re: как определить можно ли строку конвертировать в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Denis A.
Winnipuh,

Есть функция is_numeric:

if is_numeric(@mystring)<>1 raiserror(16,1,'Щито щито?')
Что-то Ваша мысль непонятна в свете данной темы про тип REAL
Например,
ISNUMERIC('$')=1
но попробуйте сконвертировать эту строку в REAL
26 май 09, 14:19    [7228712]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить