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

Откуда:
Сообщений: 1197
Есть таблица

 create table t (Longitude decimal(19, 10) null, Latitude  decimal(19, 10) null)



если делаю копирование из другой таблицы gps данных типа float то выкидывает ошибку
"Arithmetic overflow error converting float to data type numeric"
решил найти значение, которое не дает вставить и написал курсор.


  create table t (Longitude decimal(19, 10) null, Latitude  decimal(19, 10) null)
  declare @Longitude float, @Latitude float 
  
declare cur cursor  for select  Longitude, Latitude FROM [gps]
open cur

fetch next from cur 
into @Longitude, @Latitude 

while @@fetch_status = 0
begin 

	select @Longitude,  @Latitude 
	begin try

		insert t select  @Longitude, @Latitude
	end try
	begin catch 
		select @Longitude,  @Latitude 
	end catch

fetch next from cur 
into @Longitude, @Latitude 

end 

close cur 
deallocate cur

drop table t


но проблему не могу найти. Если закомментировать select @Longitude, @Latitude перед begin try то всё вставляется
если расскоментить, то @Longitude, @Latitude показывает null последним и это должно вставляться

что не так я делаю?
6 май 16, 12:46    [19142212]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Может так будет лучше, чтобы узнать какие значения не являются числами?
SELECT Longitude,
       Latitude
FROM [gps]
WHERE ISNUMERIC(Longitude) = 0
    OR ISNUMERIC(Latitude) = 0
6 май 16, 12:52    [19142239]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
если делаю копирование из другой таблицы

Что за команда такая "копирование из другой таблицы" ?
6 май 16, 12:57    [19142258]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
o-o
Guest
AlanDenton
Может так будет лучше, чтобы узнать какие значения не являются числами?
SELECT Longitude,
       Latitude
FROM [gps]
WHERE ISNUMERIC(Longitude) = 0
    OR ISNUMERIC(Latitude) = 0

так не поможет же.
у него они все "числа", иначе как бы они во флоате лежали?
у него переполнение при конвертации.
вот пример
(запустите как есть, убедитесь, что все числа.
ну и потом раскомментируйте)
declare @t2 table(id int, val float);
insert into @t2 VALUES
(1, 2e100),
(2, 10),
(3, 3e-100);

--insert into @t1(id, val)
--select id, val
--from @t2;

select *
from @t2
WHERE ISNUMERIC(val) = 0
    OR ISNUMERIC(val) = 0
6 май 16, 12:58    [19142267]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
o-o
Guest
Glory
relief
если делаю копирование из другой таблицы

Что за команда такая "копирование из другой таблицы" ?

у него 2 таблицы.
в одной поле флоат, в другой дечимал.
первую во вторую копирует (insert..select)
и переполняет дечимал своими флоатами
6 май 16, 13:00    [19142276]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
первую во вторую копирует (insert..select)

Вы рядом с ТС сидитет и диктуете ему тексты команд ?
6 май 16, 13:01    [19142280]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
o-o
Guest
Glory
o-o
первую во вторую копирует (insert..select)

Вы рядом с ТС сидитет и диктуете ему тексты команд ?

нет.
просто у меня такое окружение,
что я давно любое косноязычие с полуслова воспринимаю.
и даже перевожу с неродного языка на неродной же остальным для понимания того,
что некоторые на родном пытаютася выразить.
попадание почти стопроцентное
6 май 16, 13:05    [19142296]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
попадание почти стопроцентное

Я вас конечно поздравляю.
Но можно вас попросить здесь не отвечать за тех, кому адресуются вопросы ?

Сообщение было отредактировано: 6 май 16, 13:07
6 май 16, 13:06    [19142301]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
o-o
Guest
да пожалуйста.
я ж для экономии всеобщего времени :)
6 май 16, 13:10    [19142309]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
o-o
описал в точности то, что я делаю.

Как найти проблему?
6 май 16, 13:14    [19142323]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
o-o
описал в точности то, что я делаю.

Как найти проблему?


Начать как всегда с публикации версии сервера.
6 май 16, 13:16    [19142334]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
o-o
Guest
предлагаю перевести float в строку с параметрами 19,10.
когда не влезет, в ответе звезды.
вот это и надо себе отфильтровать:
declare @t2 table(id int, val float);
insert into @t2 VALUES
(1, 2e100),
(2, 10),
(3, 3e-100);

select *
from @t2
where str(val, 19, 10) like '*%'
6 май 16, 13:29    [19142408]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
o-o
описал в точности то, что я делаю.

Как найти проблему?


Начать как всегда с публикации версии сервера.


Microsoft SQL Server 2005 - 9.00.5069.00 (Intel X86)
Aug 22 2012 16:01:52
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
6 май 16, 13:48    [19142532]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
o-o
предлагаю перевести float в строку с параметрами 19,10.
когда не влезет, в ответе звезды.
вот это и надо себе отфильтровать:
declare @t2 table(id int, val float);
insert into @t2 VALUES
(1, 2e100),
(2, 10),
(3, 3e-100);

select *
from @t2
where str(val, 19, 10) like '*%'



сделал

create table t (Longitude float, Latitude   float)
 
  
insert t
select  Longitude, Latitude  FROM gps
 
select * from  t
where str(Longitude, 19, 10) like '*%' or str(Latitude, 19, 10) like '*%'


нет записей
6 май 16, 13:49    [19142546]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
Все же просто

declare @x numeric(19,10), @y numeric(19,10)
set @x = 999999999.9999999999
set @y = -999999999.9999999999

select  Longitude, Latitude FROM [gps]
where Longitude not between @x and @y or Latitude not between @x and @y
6 май 16, 13:52    [19142575]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
Все же просто

declare @x numeric(19,10), @y numeric(19,10)
set @x = 999999999.9999999999
set @y = -999999999.9999999999

select  Longitude, Latitude FROM [gps]
where Longitude not between @x and @y or Latitude not between @x and @y


вы наверное хотели
@y and @x


Да. Понял. Спасибо!
6 май 16, 14:03    [19142655]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
relief
Glory
Все же просто

declare @x numeric(19,10), @y numeric(19,10)
set @x = 999999999.9999999999
set @y = -999999999.9999999999

select  Longitude, Latitude FROM [gps]
where Longitude not between @x and @y or Latitude not between @x and @y


вы наверное хотели
@y and @x


Да. Понял. Спасибо!


not between @y and @x
6 май 16, 14:05    [19142674]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @x numeric(19,10), @y numeric(19,10)
set @x = 999999999.9999999999
set @y = -999999999.9999999999

select Longitude, Latitude FROM [gps]
where not (Longitude not between @y and @x and Latitude between @y and @x)
6 май 16, 14:07    [19142683]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
declare @x numeric(19,10), @y numeric(19,10)
set @x = 999999999.9999999999
set @y = -999999999.9999999999

select Longitude, Latitude FROM [gps]
where not (Longitude not between @y and @x and Latitude between @y and @x)


а когда тогда сконвертировать в decimal(19, 10)?
я и так с запасом взял. насколько понимаю decimal(9,6) уже нормально
6 май 16, 14:14    [19142725]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
а когда тогда сконвертировать в decimal(19, 10)?

сконвертировать что ?
6 май 16, 14:16    [19142735]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
а когда тогда сконвертировать в decimal(19, 10)?

сконвертировать что ?


значения float которые не влезают в децимал(19, 10)

вот одно из них 5.57600507146859E+15
6 май 16, 14:21    [19142757]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
значения float которые не влезают в децимал(19, 10)

вот одно из них 5.57600507146859E+15

Вопрос вроде, как мне влезть в джинсы на 6 размеров меньше
6 май 16, 14:26    [19142785]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
значения float которые не влезают в децимал(19, 10)

вот одно из них 5.57600507146859E+15

Вопрос вроде, как мне влезть в джинсы на 6 размеров меньше


учитывая, что это гипеес, то я могу обрезать. точность не особо важна))
6 май 16, 14:43    [19142876]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
учитывая, что это гипеес, то я могу обрезать. точность не особо важна))

И как же вы урежете число 5576005071468590 до 9ти знаков до запятой ? Поделитесь рецептом
6 май 16, 14:46    [19142902]     Ответить | Цитировать Сообщить модератору
 Re: Поймать ошибку  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а try_cast / try_convert - не предлагать? и/или сохранение где-то "оригинальных" значений без преобразования типов. и уже совсем "кощунственное" - а почему у вас типы хранения "хуже", чем входящие данные? обычно наоборот делают
6 май 16, 15:03    [19142995]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить