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

Откуда:
Сообщений: 182
У меня есть поле типа varchar(50), мне необходимо его конвернуть к типу FLOAT. Вот только есть проблема: не все значения имеют тип FLOAT, поэтому будет ошибка. А мне хотелось бы для тех значений, что не ковертнулись возвращать NULL. Это возможно?
24 авг 09, 06:33    [7571295]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
aleks2
Guest
gigadedushka,

BOL: ISNUMERIC()
+CASE
24 авг 09, 06:44    [7571300]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
gigadedushka
Member

Откуда:
Сообщений: 182
СПАСИБО!!! То что я искал
24 авг 09, 07:12    [7571312]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
AndrF
Member

Откуда:
Сообщений: 2194
gigadedushka
СПАСИБО!!! То что я искал



Про то что число может вылезти за пределы float только не забудьте... ;)
24 авг 09, 08:29    [7571378]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
gigadedushka
СПАСИБО!!! То что я искал
А что нашли?

Вот, посмотрите

Короче говоря, для FLOAT
WHERE ISNUMERIC(S)=1 AND S LIKE '%[0-9]%' AND S NOT LIKE '%[^-+.eE 0-9]%';
24 авг 09, 09:08    [7571438]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
gigadedushka
Member

Откуда:
Сообщений: 182
Учту
24 авг 09, 09:20    [7571480]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
gigadedushka
Учту
Забыл сказать (хотя, Вы, может быть, и сами уже нашли на форуме), что оптимизатор
вполне может сначала вычислять значения во всех строках, а уже потом применять к ним WHERE.
Поэтому запрос должен выглядеть так:
SELECT
 CAST
 (
  CASE
   WHEN ISNUMERIC(Field)=1 AND Field LIKE '%[0-9]%' AND Field NOT LIKE '%[^-+.eE 0-9]%'
   THEN Field
  END
  AS FLOAT
 ) FieldAsFloat
FROM [Table]
WHERE ....
24 авг 09, 09:43    [7571565]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
gigadedushka
Member

Откуда:
Сообщений: 182
Это был вспомогательный вопрос, у меня теперь вот какая основная задача:
есть таблица, для примера одна колонка (VARCHAR):
01
02
03
04
06
07
08
10
11
Я хочу сделать группировку, чтобы результатом было: 01-04, 06-08, 10, 11
Возможно ли средствами SQL такое решить?
24 авг 09, 12:02    [7572248]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Вот Вам для чисел
-- test data
declare @t table(num int unique)
insert into @t
select  1 union all
select  2 union all
select  3 union all
select  4 union all
select  6 union all
select  7 union all
select  8 union all
select 10 union all
select 11
-- end of test data

select min(num) as start, max(num) as stop
  from (select num
              ,num - row_number() over(order by num) as grp
          from @t
        ) as t
 group by grp

start       stop
----------- -----------
1           4
6           8
10          11

(3 row(s) affected)
а с VARCHAR-ами своими уж извините мучайтесь сами
Привет передавайте тому, кто Вам эту БД спроектировал
24 авг 09, 12:08    [7572297]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли в запросах обработчик ошибок?  [new]
gigadedushka
Member

Откуда:
Сообщений: 182
Спасибо и на этом, есть хоть от чего оттолкнуться
25 авг 09, 07:05    [7575384]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить