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

Откуда:
Сообщений: 145
Помогите не пойму как работает MS SQL:
Есть таблица с полем типа varchar(max). В нем может быть как целое число (идентификатор) так и не число. Мне нужно выбрать все записи где целое число. вроде все просто, но если число 8 и более знаков, то при передаче в функцию для проверки на число, значение преобразуется в экспоненциальное представление.
Например:
select ID,cast(ID as varchar(max)) F1,
dbo.IsNumber(ID) F2 -- функция проверки строки на число
from Table

возвращает
ID=58415005 F1=5.8415e+007 F2=0

Т.е. уже при передаче в функцию с входным параметром varchar(max) уже идет преобразование, хотя поле ID уже имеет формат varchar(max). Вообщем не понимаю.

Вообщем нужно чтобы он не преобразовывал в экспоненциальное представление.
14 дек 11, 14:26    [11764295]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Mih_dim
Есть таблица с полем типа varchar(max). В нем может быть как целое число (идентификатор) так и не число
Передавайте привет тому, кто Вам такую базу спроектировал
14 дек 11, 14:30    [11764335]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
У меня нормально.
DECLARE @ID INT SET @ID = 58415005
select @ID,cast(@ID as varchar(max)) F1, ISNUMERIC(@ID) F2 


58415005 58415005 1
14 дек 11, 14:34    [11764393]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Это у вас может клиент (ексель например) коверкает.
14 дек 11, 14:36    [11764415]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
Mih_dim
Вообщем нужно чтобы он не преобразовывал в экспоненциальное представление.
текст сиквелом не может преобразовываться как число :-)
14 дек 11, 14:39    [11764448]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Mih_dim
Member

Откуда:
Сообщений: 145
Всем спасибо, это я протупил. Извините. На самом деле id тип float. Самый оптимальный вариант преобразования это cast(cast(ID as numeric(38,8)) as varchar(max)) или есть более правильный способ?
14 дек 11, 14:39    [11764450]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Mih_dim
Всем спасибо, это я протупил. Извините. На самом деле id тип float. Самый оптимальный вариант преобразования это cast(cast(ID as numeric(38,8)) as varchar(max)) или есть более правильный способ?

У идентификатора может быть дробная часть?
Может всетки лучше cast(cast(ID as numeric(38,0)) as varchar(max)

Я вообще не очень понимаю кому пришло в голову идентификатор делать типом флоат)
14 дек 11, 14:51    [11764578]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
Mih_dim
На самом деле id тип float. Самый оптимальный вариант преобразования это cast(cast(ID as numeric(38,8)) as varchar(max)) или есть более правильный способ?
В зависимости от того, что у вас там лежит.

numeric(38,8) - значит, там может быть до 8 знаков после запятой?
14 дек 11, 14:52    [11764589]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Mih_dim
Member

Откуда:
Сообщений: 145
Deff,

Это внешняя загрузка из Excel. Люди сопоставляют колонки на форме, а мы прога должна проверить и если все ок, загрузить. Вообщем там еще есть заморочки. так вот нам нужно отобрать мусор от не мусора и загрузить там где идентификаторы верны и есть в базу куда мы грузим. Я же написал что задача уже другая. Просто стало интересно как преобразовать float более 8 значимых знаков в строку, но чтоб не было экспоненциальной формы? Вот и все.
З.Ы. Никто не делал бы такою идиотскую таблицу :)
14 дек 11, 17:01    [11765960]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
Mih_dim
Просто стало интересно как преобразовать float более 8 значимых знаков в строку, но чтоб не было экспоненциальной формы? Вот и все.
В сиквеле таких средств нету, можно придумать какие то ваианты только при каких то ограничениях на число. Или написать свою программу/функцию преобразования.
14 дек 11, 17:57    [11766505]     Ответить | Цитировать Сообщить модератору
 Re: Странное преобразование varchar в int (экспоненциальное представление)  [new]
Mih_dim
Member

Откуда:
Сообщений: 145
Спасибо всем за помощь. Будем искать
15 дек 11, 08:54    [11768634]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить