Приведение типов SQL - PullRequest
       7

Приведение типов SQL

4 голосов
/ 28 июля 2010

Я делю несколько целых чисел x & y в MS SQL и хочу, чтобы результат был в форме с плавающей запятой.5/2 должно равняться 2,5.Когда я просто делаю

SELECT 5/2

, я получаю 2, что меня не удивляет, так как оно создает int из двух целых.Я знаю, что могу заставить его всплыть, выполнив:

SELECT CAST(5 AS FLOAT)/CAST(2 AS FLOAT);

, но это кажется излишним.Я обнаружил, что могу так же легко (и гораздо более легко прочитать) получить тот же результат, используя

SELECT (0.0+5)/2;

Я предполагаю, что это просто некое неявное приведение типов?Есть ли какая-то причина, по которой метод лучше / хуже?

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Поскольку вы пишете 0.0, TSQL интерпретирует это как значение с плавающей запятой.Все следующие целые числа неявно приводятся к плавающему.

См. Также матрицу неявного преобразования типов данных в разделе Неявные преобразования

2 голосов
/ 28 июля 2010

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

SELECT CAST(5 AS FLOAT)/CAST(2 AS FLOAT);

Нет никаких сомнений в том, что здесь задумано, и что вы поймете, когда вернетесь к коду через 6 месяцев или когда другой разработчик впервые увидит его.

2 голосов
/ 28 июля 2010

Под крышками нет никакой разницы в реализации. Неявные приведения выполняют то же, что и ваши явные приведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...