Значение столбца таблицы не то, что кажется - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь найти все записи в таблице, где количество меньше 1. Для этого я использую простой запрос:

SELECT * FROM Table WHERE Quantity < 1

Однако я получаю результаты, в которых количество действительно 1. Тип этого столбца - FLOAT по какой-то странной причине (не спрашивайте, почему, я его не создавал)

Как мне узнать точное значение этого столбца. Я пробовал:

SELECT 
  CEILING(quantity) as [Ceiling quantity], 
  FLOOR(quantity) as [Floor quantity], 
  CAST(ROUND(Quantity, 2) AS INT) as [Rounded quantity], 
  Quantity AS [Actual quantity] 
FROM Table

Но результат:

Ceiling quantity       Floor quantity         Rounded quantity Actual quantity
---------------------- ---------------------- ---------------- ----------------------
1                      0                      1                1

Я знаю, что технически количество меньше единицы. Я пытаюсь найти достойный способ получить фактическое значение, которое содержит этот столбец.

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Метод CONVERT имеет стиль, в котором каждое отдельное значение с плавающей запятой гарантированно преобразуется в отдельную символьную строку. Это стиль номер 3, и он доступен в SQL Server 2016 и более поздних версиях. Вы можете узнать больше о методе CONVERT и различных стилях здесь:

https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

Вы можете попробовать это следующим образом:

SELECT Convert (VARCHAR(99), Quantity, 3) FROM Table
0 голосов
/ 07 мая 2020

Спасибо @JeroenMostert за правильный ответ:

SELECT 
  FORMAT(quantity, 'G17') as [Format quantity]
FROM Table

приводит к:

Format quantity
-------------------
0.99999999999999989
...