round - truncar a dos decimales sql




SQL-¿Cómo obtengo solo los números después del decimal? (7)

¿Cómo obtengo solo los números después del decimal?

Ejemplo: 2.938 = 938


CAST (DERECHA (MyField, LEN (MyField) -CHARINDEX ('.', MyField) +1) AS FLOAT)


El truco habitual (que varía un poco en sintaxis) es

x - floor(x)

Esa es la parte fraccional. Para convertirlo en un entero, escalarlo.

(x - floor(x)) * 1000

Puedes usar FLOOR :

select x, ABS(x) - FLOOR(ABS(x))
from (
    select 2.938 as x
) a

Salida:

x                                       
-------- ----------
2.938    0.938

O puede usar SUBSTRING :

select x, SUBSTRING(cast(x as varchar(max)), charindex(cast(x as varchar(max)), '.') + 3, len(cast(x as varchar(max))))
from (
    select 2.938 as x
) a

Puedes usar el DERECHO:

 select RIGHT(123.45,2) return => 45

Si sabes que quieres los valores en milésimas, ponlo, es

SELECT (num - FLOOR(num)) * 1000 FROM table...;

Un enfoque más general puede ser combinar PARSENAME y el operador%. (como se respondió en dos de las respuestas anteriores)

Resultados según el primer enfoque anterior de SQLMenace

select PARSENAME(0.001,1) 

Resultado: 001

select PARSENAME(0.0010,1) 

Resultado: 0010

select PARSENAME(-0.001,1)

Resultado: 001

select PARSENAME(-1,1)

Resultado: -1 -> No debe devolver la parte entera

select PARSENAME(0,1)

Resultado: 0

select PARSENAME(1,1)

Resultado: 1 -> No debe devolver la parte entera

select PARSENAME(100.00,1)

Resultado: 00

Resultados según el primer enfoque anterior de Pavel Morshenyuk "0". es parte del resultado en este caso.

SELECT (100.0001 % 1)

Resultado: 0.0001

SELECT (100.0010 % 1)

Resultado: 0.0010

SELECT (0.0001 % 1)

Resultado: 0.0001

SELECT (0001 % 1)

Resultado: 0

SELECT (1 % 1)

Resultado: 0

SELECT (100 % 1)

Resultado: 0

Combinando ambos:

SELECT PARSENAME((100.0001 % 1),1)

Resultado: 0001

SELECT PARSENAME((100.0010 % 1),1)

Resultado: 0010

SELECT PARSENAME((0.0001 % 1),1)

Resultado: 0001

SELECT PARSENAME((0001 % 1),1)

Resultado: 0

SELECT PARSENAME((1 % 1),1)

Resultado: 0

SELECT PARSENAME((100 % 1),1)

Resultado: 0

Sin embargo, una cuestión que queda es el cero después de que los números distintos de cero sean parte del resultado (Ejemplo: 0.0010 -> 0010). Puede ser uno tiene que aplicar alguna otra lógica para eliminar eso.


prueba esto:

SELECT (num % 1)




tsql