Pular para o conteúdo

Uma função do PlaidCloud, disponível em todos os motores de lakehouse. Divide o primeiro número pelo segundo. Quando o denominador é zero, ou qualquer um dos lados é NULL, o resultado é NULL, a menos que seja indicado um terceiro valor, caso em que é devolvido esse valor. Ambos os lados são primeiro convertidos para DECIMAL(38, 10), pelo que as colunas de números inteiros são divididas sem truncatura.

func.safe_divide(<numerator>, <denominator>, <divide_by_zero_value>)
func.safe_divide(<numerator>, <denominator>)
func.safe_divide(table.revenue, table.units, 0)
| revenue | units | safe_divide |
|---------|-------|-------------|
| 100 | 8 | 12.5 |
| 100 | 0 | 0 |
| 100 | NULL | 0 |
func.safe_divide(table.revenue, table.units, None)
| revenue | units | safe_divide |
|---------|-------|-------------|
| 100 | 8 | 12.5 |
| 100 | 0 | NULL |

Não existe nenhuma função SQL com este nome. A expressão é compilada em:

COALESCE(CAST(<numerator> AS DECIMAL(38, 10)) / NULLIF(CAST(<denominator> AS DECIMAL(38, 10)), 0), <divide_by_zero_value>)

Sem o terceiro argumento não existe COALESCE, e um denominador igual a zero dá NULL:

CAST(<numerator> AS DECIMAL(38, 10)) / NULLIF(CAST(<denominator> AS DECIMAL(38, 10)), 0)