diff --git a/core/trino-main/src/main/java/io/trino/operator/scalar/MathFunctions.java b/core/trino-main/src/main/java/io/trino/operator/scalar/MathFunctions.java index 5df1d49ae2ec..c5009f121f4a 100644 --- a/core/trino-main/src/main/java/io/trino/operator/scalar/MathFunctions.java +++ b/core/trino-main/src/main/java/io/trino/operator/scalar/MathFunctions.java @@ -1176,6 +1176,15 @@ public static boolean isNaN(@SqlType(StandardTypes.DOUBLE) double num) return Double.isNaN(num); } + @Description("Test if value is not-a-number") + @ScalarFunction("is_nan") + @SqlType(StandardTypes.BOOLEAN) + public static boolean isNaNReal(@SqlType(StandardTypes.REAL) long value) + { + float floatValue = intBitsToFloat(toIntExact(value)); + return Float.isNaN(floatValue); + } + @Description("Test if value is finite") @ScalarFunction @SqlType(StandardTypes.BOOLEAN) diff --git a/core/trino-main/src/test/java/io/trino/operator/scalar/TestMathFunctions.java b/core/trino-main/src/test/java/io/trino/operator/scalar/TestMathFunctions.java index 1dd8d5316fec..4df7da04557f 100644 --- a/core/trino-main/src/test/java/io/trino/operator/scalar/TestMathFunctions.java +++ b/core/trino-main/src/test/java/io/trino/operator/scalar/TestMathFunctions.java @@ -616,6 +616,7 @@ public void testIsNaN() assertFunction("is_nan(0.0E0 / 1.0E0)", BOOLEAN, false); assertFunction("is_nan(infinity() / infinity())", BOOLEAN, true); assertFunction("is_nan(nan())", BOOLEAN, true); + assertFunction("is_nan(REAL 'NaN')", BOOLEAN, true); assertFunction("is_nan(REAL '0.0' / REAL '0.0')", BOOLEAN, true); assertFunction("is_nan(REAL '0.0' / 1.0E0)", BOOLEAN, false); assertFunction("is_nan(infinity() / infinity())", BOOLEAN, true);