У меня есть таблица с a1 и a2 столбцов с плавающей точкой,Найдите столбец с десятичным значением для '.'
Значения в а2 вычисляются из a1, а а2 = 3 * a1
условие:
Если значение в А1 9.5, мне нужно получить значение потолка в a2 , т. Е. Если числовое значение после десятичной точки больше или равно 5, мне нужно получить значение потолка, иначе мне нужно получить значение пола.
я написал ниже запрос
SET a2 =(case when substring(cast((a1 * 3) as varchar(6)),CHARINDEX('.',(a1*3)),1) >=5 then CEILING(a1 * 3) else FLOOR(a1 * 3) end) from table
, но, очевидно, возвращает ошибку ниже:
преобразования не удалось при преобразовании значения VARCHAR «» к типу данных int.
Так как он не может принимать варчар в потолок или пол.
Есть ли способ, которым я могу достичь этого?
Ваша помощь будет принята с благодарностью.
Значение a2 продолжает изменяться в зависимости от a1, если a1 равно 4,5 a2, если это потолок, если a1 равен 4.9 a2, должно быть снова значение потолка, но если a1 - это что-то ниже 4.5 в качестве 4.3.4.2.4.1, то оно должно значение пола
Любой другой подход для этого также будет выполняться, кроме потолка и пола.
Поместите конверт внутри потолка и пола – artm
Пожалуйста, отредактируйте этот вопрос и предоставите данные образца и желаемые результаты. Могут быть лучшие способы сделать то, что вы хотите. –
как @GordonLinoff ответил, что вы описываете, что делает функция ROUND. – 1010