Допустим, у меня есть следующие данные в столбце идентификаторов decimal (18,9)
в таблице базы данных:
ID
========
1000.00
1001.23
1002.00
1003.23
Я хочу написать запрос SQL, который возвращает только те записи, которые имеют .230000000
длясправа от десятичной точки, так что возвращаются только следующие данные:
1001.23
1003.23
Я знаю, что мог бы сделать это, преобразовав его в строку, выполнив сравнение строк, но есть ли лучший способ, который нене требует сравнения строк и более эффективен при обработке числовых значений?
На основании Ответ Мартина , я думаю, что лучшее решение для использования будет выглядеть так:*
Я добавил функцию Abs()
для работы с отрицательными числами.
Я провел следующие тесты, чтобы убедиться, что я не получаю странных ошибок округления:
Declare @ID decimal(18,9)
Set @ID = 1000.000000000
Select @ID, Abs(@ID - Cast(@ID As int))
-- Returns: 1000.000000000 0.000000000
Set @ID = -1000.000000000
Select @ID, Abs(@ID - Cast(@ID As int))
-- Returns: -1000.000000000 0.000000000
Set @ID = 1000.000000001
Select @ID, Abs(@ID - Cast(@ID As int))
-- Returns: 1000.000000001 0.000000001
Set @ID = -1000.000000001
Select @ID, Abs(@ID - Cast(@ID As int))
-- Returns: -1000.000000001 0.000000001
Set @ID = 1000.999999999
Select @ID, Abs(@ID - Cast(@ID As int))
-- Returns: 1000.999999999 0.999999999
Set @ID = -1000.999999999
Select @ID, Abs(@ID - Cast(@ID As int))
-- Returns: -1000.999999999 0.999999999