Aller au contenu

Fonction PlaidCloud, disponible sur tous les moteurs lakehouse. Divise le premier nombre par le second. Lorsque le dénominateur est égal à zéro, ou que l’un des deux côtés est NULL, le résultat est NULL, sauf si une troisième valeur est fournie : dans ce cas, c’est cette valeur qui est renvoyée. Les deux côtés sont d’abord convertis en DECIMAL(38, 10), ce qui permet aux colonnes d’entiers de se diviser sans troncature.

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 |

Il n’existe pas de fonction SQL de ce nom. L’expression est compilée en :

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

Sans le troisième argument, il n’y a pas de COALESCE, et un dénominateur égal à zéro donne NULL :

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