Преобразование типов и оператор CAST стр. 3 |
||||||||||||||
Есть одна особенность использования оператора CAST в SQL Server, связанная с преобразованием числа к его строковому представлению. Что произойдет, если число символов в числе превышает размер строки? Например, Следует ожидать, что мы получим сообщение об ошибке. Правильно, вот это сообщение: Arithmetic overflow error converting numeric to data type varchar. («Ошибка арифметического переполнения при преобразовании числа к типу данных VARCHAR».) Естественно, что мы будем ожидать того же сообщения и при выполнении следующего оператора: Но нет. В результате мы получим символ «*» вместо сообщения об ошибке. Мы не беремся судить, с чем это связано, однако, однажды мы столкнулись с проблемой диагностики ошибки в коде, в котором впоследствии выполнялось обратное преобразование к числовому типу. В нашем простейшем примере это будет выглядеть так: Вот тут-то мы и получаем ошибку: Syntax error converting the varchar value '*' to a column of data type int. («Ошибка синтаксиса при преобразовании значения «*» к типу данных INT».)
Примечание:
Функция Transact-SQL (T-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server и Sybase ASE.Transact-SQL CONVERT ведет себя аналогичным образом. Преобразование типа moneyДенежный тип данных не является стандартным. В SQL Server имеется два денежных типа: money: диапазон значений от –922,337,203,685,477.5808 до 922,337,203,685,477.5807 smallmoney: диапазон значений от -214 748,3648 до 214 748,3647 Точность обоих типов одна десятитысячная. Константу типа money можно задать с помощью префикса $, или же использовать преобразование типов, например:
Обратите внимание на запятую в качестве разделителя "рублей" и "копеек" - не точка! Преобразование к целому типу для чисел и денег выполняется по разному: в первом случае дробная часть отбрасывается, во втором происходит округление.
Деньги таки, их просто так терять нельзя! |