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

Откуда: Киев
Сообщений: 587
Гуру, это ошибка mssql2008 или нужно внимательно БОЛ читать?
use tempdb
GO
if not object_id('t1') is null drop table t1
GO
create table t1 (
	f1 numeric(15, 4) null
)
GO
insert into t1 values(99999999999.11111)
GO
select len(f1) len_f1 from t1
GO
1. Почему len рабоатет с числовыми полями?
2. Почему результат 16?
Спасибо.
1 июл 09, 18:07    [7365193]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Прикольна

To return the number of bytes used to represent an expression, use the DATALENGTH function.

ну и DATALENGTH
-------------------------------------
Jedem Das Seine
1 июл 09, 18:24    [7365256]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Ora Starter
Member

Откуда: Киев
Сообщений: 587
Эт я то знаю, почему len то работает? :)
1 июл 09, 18:26    [7365266]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Ora Starter
Member

Откуда: Киев
Сообщений: 587
Почему собсно интересно, хочу знать смогу ли я конвертировать numeric в int сделав такой запрос:
select max(len(numeric_field)) from my_table
?
Если len - это бага и потом ее уберут, то будет не прикольна...
1 июл 09, 18:28    [7365278]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ето просто обертка...а в DATALENGTH можно пихать почти все что угодно :)
Видмимо проверку типа вписать забыли,моя думать баго-фича :)
-------------------------------------
Jedem Das Seine
1 июл 09, 18:28    [7365282]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Ora Starter
Почему собсно интересно, хочу знать смогу ли я конвертировать numeric в int сделав такой запрос:
select max(len(numeric_field)) from my_table
?
Если len - это бага и потом ее уберут, то будет не прикольна...


вот такое , я б точно в продуктив не пропустил.
1 июл 09, 18:30    [7365285]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Ora Starter
Member

Откуда: Киев
Сообщений: 587
а как лучще? try catch?
1 июл 09, 18:30    [7365289]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
да и стандартные ф-ции приведения типов данных.
-------------------------------------
Jedem Das Seine
1 июл 09, 18:33    [7365300]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Ora Starter
Member

Откуда: Киев
Сообщений: 587
Спасибо.
1 июл 09, 18:35    [7365310]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Ora Starter

1. Почему len рабоатет с числовыми полями?
2. Почему результат 16?

Все законно.
1. Один знак после запятой обрезается при инсерте, а для len() выполняется неявное преобразование к varchar.
99999999999.11111 -> 99999999999.1111 -> '99999999999.1111'
2. 16 символов :)
1 июл 09, 18:58    [7365402]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Ora Starter
Member

Откуда: Киев
Сообщений: 587
Спасибо. Интересно это фича? бага?
1 июл 09, 19:01    [7365411]     Ответить | Цитировать Сообщить модератору
 Re: len and numeric?  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Ora Starter
Спасибо. Интересно это фича? бага?

Ни то, ни другое. Все 'по определению'. Другое дело, что с неявными преобразованиями лучше не связываться. В разных версиях сервера они могут вести себя по-разному.
1 июл 09, 19:11    [7365444]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить