Как я могу найти значения с более чем двумя десятичными разрядами? - PullRequest
2 голосов
/ 25 июня 2019

Я проверяю данные и пытаюсь найти, есть ли какие-либо значения в одном столбце (allow_amount) с более чем двумя десятичными разрядами (24.1145678, 234.444, -1234.09012).

with t1 as (
  select (allowed_amount - round(allowed_amount,2)) as ck
  from export_core_report_client_output
  where runid = '0c7c2d34-6cc3-43b0-ae4b-4bd8f4bddfb0'
) 
select min(ck) as min, max(ck) as max from t1

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Один вариант будет использовать эту формулу:

SELECT
    num,
    CASE WHEN 100*num - CAST(100*num AS int) > 0 THEN 'yes' ELSE 'no' END AS field
FROM yourTable;

Демо

Например, для значения 24.1234,Приведенная выше формула вычисляет:

2412.34 - 2412 = 0.34 > 0

Но для 24.12 мы получаем:

2412 - 2412 = 0
0 голосов
/ 27 июня 2019

Вы можете использовать Charindex для этого, предполагая, что столбец allow_amount равен varchar или nvarchar

select len(substring(allowed_amount,charindex('.',allowed_amount)+1,len(allowed_amount))) from export_core_report_client_output

Это даст вам количество десятичных значений после, а затем вы можете использовать тот же оператор в предложении where для проверки, например:

select len(substring(allowed_amount,charindex('.',allowed_amount)+1,len(allowed_amount))) from export_core_report_client_output where len(substring(allowed_amount,charindex('.',allowed_amount)+1,len(allowed_amount)))> 2

любые вопросы всплывают в комментариях

...