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

Откуда: Msk
Сообщений: 1684
Добрый день.
select try_convert(int,'-'), try_convert(bigint,'-'), try_convert(float,'-'), try_convert(real,'-'), try_convert(money,'-')
union all
select try_convert(int,'.'), try_convert(bigint,'.'), try_convert(float,'.'), try_convert(real,'.'), try_convert(money,'.')

----------- -------------------- ---------------------- ------------- ---------------------
0           0                    NULL                   NULL          0,00
NULL        NULL                 NULL                   NULL          0,00


Про это написано где нибудь в документации по 2012-й версии?
Или это надо "запомнить, т.к. понять это невозможно"(с) ?
15 апр 13, 11:40    [14180504]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
qwrqwr,

CAST('-'AS INT)=0
CAST('.' AS INT) - 'Conversion failed when converting the varchar value '.' to data type int.'


что тут непонятно? Точка - признак числа с десятичной точкой, а не целого.
А все целые типы, кроме TINYINT, - знаковые.
Microsoft позволяет конвертировать знак числа в 0.
Так было всегда. См ISNUMERIC()
15 апр 13, 12:48    [14181067]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
iap
qwrqwr,

CAST('-'AS INT)=0
CAST('.' AS INT) - 'Conversion failed when converting the varchar value '.' to data type int.'


что тут непонятно? Точка - признак числа с десятичной точкой, а не целого.
А все целые типы, кроме TINYINT, - знаковые.
Microsoft позволяет конвертировать знак числа в 0.
Так было всегда. См ISNUMERIC()

хмм, как в эти объяснения укладываются
try_convert(float,'.'), try_convert(real,'.'),try_convert(float,'-'), try_convert(real,'-')
они как бы то же знаковые и как бы то же не целые
15 апр 13, 12:55    [14181135]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
ISNUMERIC returns 1 for some characters that are not numbers, such as plus (+), minus (-), and valid currency symbols such as the dollar sign ($).
15 апр 13, 12:56    [14181141]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
Glory
ISNUMERIC returns 1 for some characters that are not numbers, such as plus (+), minus (-), and valid currency symbols such as the dollar sign ($).

почему тогда
1.
try_convert(float,'-'), try_convert(real,'-') = null ?

2.
try_convert(float,'.'), try_convert(money,'.') возвращают разные результаты?
15 апр 13, 12:59    [14181177]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
почему тогда
1.
try_convert(float,'-'), try_convert(real,'-') = null ?

2.
try_convert(float,'.'), try_convert(money,'.') возвращают разные результаты?

А почему конвертация в разные типы данных должна возвращать одинаковые результаты ?
15 апр 13, 13:03    [14181208]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
try_convert
Glory
ISNUMERIC returns 1 for some characters that are not numbers, such as plus (+), minus (-), and valid currency symbols such as the dollar sign ($).

почему тогда
1.
try_convert(float,'-'), try_convert(real,'-') = null ?

2.
try_convert(float,'.'), try_convert(money,'.') возвращают разные результаты?
Для float и real должна быть хотя бы одна цифра.
Установлено экспериментальным путём: ошибка при конвертации

По сравнению с этим не знаю, что там может быть нового в try_convert() SQL2012
15 апр 13, 13:12    [14181293]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
Glory
try_convert
почему тогда
1.
try_convert(float,'-'), try_convert(real,'-') = null ?

2.
try_convert(float,'.'), try_convert(money,'.') возвращают разные результаты?

А почему конвертация в разные типы данных должна возвращать одинаковые результаты ?

зачем одинаковые?
хотя бы объяснимые или документированные.


iap
Для float и real должна быть хотя бы одна цифра.
Установлено экспериментальным путём: ошибка при конвертации

По сравнению с этим не знаю, что там может быть нового в try_convert() SQL2012


ну т.е. правильный ответ на вопрос автора (дополнено мной)
qwrqwr
это надо "запомнить, т.к. понять или найти в документации это невозможно"(с)
15 апр 13, 13:24    [14181410]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
зачем одинаковые?
хотя бы объяснимые или документированные.

Вы спросили "почему тогда ... возвращают разные результаты?" Вы под "разные" понимаете " объяснимые или документированные" ?

Character expressions that are being converted to an approximate numeric data type can include optional exponential notation (a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number).

Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). Leading blanks are ignored. Comma separators, such as the thousands separator in 123,456.00, are not allowed in the string.

Character expressions being converted to money or smallmoney data types can also include an optional decimal point and dollar sign ($). Comma separators, as in $123,456.00, are allowed.
15 апр 13, 13:27    [14181424]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Glory,

надо сказать, эта цитата не охватывает всего, а в некоторых местах просто врёт.
Например, почему строка ДОЛЖНА содержать точку, чтобы её конвертировать в точный числовой тип
(наверно, DEC или NUMERIC), - я не понимаю.
Или почему говорится о знаке доллара, хотя допускается, например, символ евро?
15 апр 13, 13:40    [14181515]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
Glory
Вы спросили "почему тогда ... возвращают разные результаты?" Вы под "разные" понимаете " объяснимые или документированные" ?

под "объяснимые или документированные" я понимаю "почему"

Glory
Character expressions that are being converted to an approximate numeric data type can include optional exponential notation (a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number).

вы что-то не то процетировали, тут только про "+" и "-" перед E


Glory
Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). Leading blanks are ignored. Comma separators, such as the thousands separator in 123,456.00, are not allowed in the string.


Character expressions being converted to money or smallmoney data types can also include an optional decimal point and dollar sign ($). Comma separators, as in $123,456.00, are allowed.

и что? "." - это допустимый символ в строках для конвертации как в money так и во float, но здесь нигде нет объяснение разных результатов try_convert(float,'.'), try_convert(money,'.').
15 апр 13, 13:42    [14181531]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
но здесь нигде нет объяснение разных результатов try_convert(float,'.'), try_convert(money,'.').

Еще раз спрошу - почему конвертация к разным типам данных должна давать одинаковый результат ?

try_convert
вы что-то не то процетировали, тут только про "+" и "-" перед E

хотя бы объяснимые или документированные.

try_convert
и что? "." - это допустимый символ в строках для конвертации как в money так и во float, но здесь нигде нет объяснение разных результатов try_convert(float,'.'), try_convert(money,'.').

Вы разницу между "допустимый символ" и "результат конвертации" понимаете ?

select cast('111111' as tinyint) - у меня все символы допустимые ! чего он не конвертирует то ??
15 апр 13, 13:51    [14181577]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
[quot Glory]
try_convert
но здесь нигде нет объяснение разных результатов try_convert(float,'.'), try_convert(money,'.').

Еще раз спрошу - почему конвертация к разным типам данных должна давать одинаковый результат ?
[quot]
еще раз отвечу - не одинаковые, а хотя бы объяснимые или документированные. Ни объяснения, ни цитаты из документации, объясняющий этот факт, вы так и не привели.

[quot Glory]
try_convert
вы что-то не то процетировали, тут только про "+" и "-" перед E

хотя бы объяснимые или документированные.
[quot] и бесполезное, относительно вопроса.


Glory
try_convert
и что? "." - это допустимый символ в строках для конвертации как в money так и во float, но здесь нигде нет объяснение разных результатов try_convert(float,'.'), try_convert(money,'.').

Вы разницу между "допустимый символ" и "результат конвертации" понимаете ?

это я прекрасно понимаю, я не понимаю в чем сакральная разница м/у money и float при конвертации в них строки состоящей из одного символа "."
15 апр 13, 14:04    [14181669]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
Glory
Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). Leading blanks are ignored. Comma separators, such as the thousands separator in 123,456.00, are not allowed in the string.

Но, вопреки подчеркнутому, одиночный дефис таки проконвертировало.

iap
Для float и real должна быть хотя бы одна цифра.
Установлено экспериментальным путём: ошибка при конвертации

Спасибо, про хоть одну цифру в приблизительных типах не знал.

Ну, в общем, как обычно - недосказанность в документации проверяем экспериментально и запоминаем.

Всем спасибо за ответы.
15 апр 13, 14:04    [14181672]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
это я прекрасно понимаю, я не понимаю в чем сакральная разница м/у money и float при конвертации в них строки состоящей из одного символа "."

Для вас по всей видимости никакой. Число и число

try_convert
и бесполезное, относительно вопроса.

Т.е. вам нужно на блюдечке с голубой каемочкой ?
И с переводом ?
15 апр 13, 14:06    [14181687]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
qwrqwr
Glory
Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). Leading blanks are ignored. Comma separators, such as the thousands separator in 123,456.00, are not allowed in the string.

Но, вопреки подчеркнутому, одиночный дефис таки проконвертировало.


select cast('-' as numeric)
Msg 8115, Level 16, State 6, Line 1
Arithmetic overflow error converting varchar to data type numeric.
15 апр 13, 14:11    [14181722]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
Glory
try_convert
это я прекрасно понимаю, я не понимаю в чем сакральная разница м/у money и float при конвертации в них строки состоящей из одного символа "."

Для вас по всей видимости никакой. Число и число

так просветите, чем же так "." плоха для float и замечательна для money?
15 апр 13, 14:14    [14181740]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
так просветите, чем же так "." плоха для float и замечательна для money?

Например, разным форматом хранения этих типов
15 апр 13, 14:15    [14181751]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
Glory
try_convert
так просветите, чем же так "." плоха для float и замечательна для money?

Например, разным форматом хранения этих типов

а какое отношение форматы хранения данных имеют к СТРОКЕ которую пытаются к этим типа преобразовать?
15 апр 13, 14:17    [14181757]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
а какое отношение форматы хранения данных имеют к СТРОКЕ которую пытаются к этим типа преобразовать?

Мда. Т.е. по-вашему, числами с плавающей точкой и целыми сервер должен одинаково оперировать ?
15 апр 13, 14:19    [14181771]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
Glory
qwrqwr
пропущено...
Но, вопреки подчеркнутому, одиночный дефис таки проконвертировало.


select cast('-' as numeric)
Msg 8115, Level 16, State 6, Line 1
Arithmetic overflow error converting varchar to data type numeric.

Glory,
вы привели три цитаты: про "an approximate numeric data type", про "an exact numeric data type" и про " money or smallmoney data types".
Поведение сервера при конвертации строк "+" или "-" к типам int/bigint цитате про "an approximate numeric data type" не соответствует, этой цитате соответствует только конвертация к типу decimal/numeric.

Означает ли это, что в хелпе также должно иметься отдельное упоминание про "Character expressions that are being converted to..." касающееся ТОЛЬКО типов int/bigint, которое вы почему-то не привели?

Или всё-таки цитата из хелпа немножко врет?
15 апр 13, 14:23    [14181798]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
qwrqwr
Поведение сервера при конвертации строк "+" или "-" к типам int/bigint цитате про "an approximate numeric data type" не соответствует, этой цитате соответствует только конвертация к типу decimal/numeric.

Здрасте.
Начните с документированного определения типа данных. А не со своей интерпретации оных.
numeric <> int
15 апр 13, 14:25    [14181809]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
[quot qwrqwr]
Glory
пропущено...
Поведение сервера при конвертации строк "+" или "-" к типам int/bigint цитате про "an approximate numeric data type" не соответствует,

цитате про "an exact numeric data type", конечно же. Пардон.
15 апр 13, 14:25    [14181811]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
try_convert
Guest
Glory
try_convert
а какое отношение форматы хранения данных имеют к СТРОКЕ которую пытаются к этим типа преобразовать?

Мда. Т.е. по-вашему, числами с плавающей точкой и целыми сервер должен одинаково оперировать ?

Глори, вы все это серьезно или троллите?
Естественно с числами с плавающей точкой и целымиточными типами оперирует по разному, но все это происходит после конвертации.
А вот самом процесс конвертации и ведет себя, хмм, странно.
15 апр 13, 14:36    [14181872]     Ответить | Цитировать Сообщить модератору
 Re: try_convert, точка и дефис.  [new]
Glory
Member

Откуда:
Сообщений: 104751
try_convert
Естественно с числами с плавающей точкой и целымиточными типами оперирует по разному, но все это происходит после конвертации.

Это как _после_ ?
Как распарсить строку "-" на целую и дробные части ?
15 апр 13, 14:39    [14181890]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить