diff --git a/src/adql/translator/MySQLTranslator.java b/src/adql/translator/MySQLTranslator.java
index ac80f4538d7f605844804d55f31e76e8edc11cd5..ba81c6ad37fe393b79c6aba8e931d359c73f0a67 100644
--- a/src/adql/translator/MySQLTranslator.java
+++ b/src/adql/translator/MySQLTranslator.java
@@ -33,6 +33,7 @@ import adql.query.operand.ADQLOperand;
 import adql.query.operand.Concatenation;
 import adql.query.operand.Operation;
 import adql.query.operand.function.InUnitFunction;
+import adql.query.operand.function.MathFunction;
 import adql.query.operand.function.geometry.AreaFunction;
 import adql.query.operand.function.geometry.BoxFunction;
 import adql.query.operand.function.geometry.CentroidFunction;
@@ -205,6 +206,20 @@ public class MySQLTranslator extends JDBCTranslator {
 		}
 	}
 
+	@Override
+	public String translate(MathFunction fct) throws TranslationException {
+		switch(fct.getType()) {
+			case TRUNCATE:
+				if (fct.getNbParameters() >= 2)
+					return "truncate(" + translate(fct.getParameter(0)) + ", " + translate(fct.getParameter(1)) + ")";
+				else
+					return "truncate(" + translate(fct.getParameter(0)) + ", 0)";
+
+			default:
+				return getDefaultADQLFunction(fct);
+		}
+	}
+
 	@Override
 	public String translate(Comparison comp) throws TranslationException {
 		switch(comp.getOperator()) {
diff --git a/src/adql/translator/PostgreSQLTranslator.java b/src/adql/translator/PostgreSQLTranslator.java
index 46d7a1a6deff668b446193b392c0839bb8fc14a6..fc34b036f4a92e5629977fa7d8abf043fad20dec 100644
--- a/src/adql/translator/PostgreSQLTranslator.java
+++ b/src/adql/translator/PostgreSQLTranslator.java
@@ -204,17 +204,13 @@ public class PostgreSQLTranslator extends JDBCTranslator {
 			case TRUNCATE:
 				if (fct.getNbParameters() >= 2)
 					return "trunc(CAST(" + translate(fct.getParameter(0)) + " AS numeric), " + translate(fct.getParameter(1)) + ")";
-				else if (fct.getNbParameters() >= 1)
-					return "trunc(CAST(" + translate(fct.getParameter(0)) + " AS numeric)" + ")";
 				else
-					return "trunc()";
+					return "trunc(CAST(" + translate(fct.getParameter(0)) + " AS numeric)" + ")";
 			case ROUND:
 				if (fct.getNbParameters() >= 2)
 					return "round(CAST(" + translate(fct.getParameter(0)) + " AS numeric), " + translate(fct.getParameter(1)) + ")";
-				else if (fct.getNbParameters() >= 1)
-					return "round(CAST(" + translate(fct.getParameter(0)) + " AS numeric))";
 				else
-					return "round()";
+					return "round(CAST(" + translate(fct.getParameter(0)) + " AS numeric))";
 			case PI:
 				return getDefaultADQLFunction(fct);
 			default:
diff --git a/src/adql/translator/SQLServerTranslator.java b/src/adql/translator/SQLServerTranslator.java
index 677e671b85a9216e19411d97d130554d73f0e640..57078170f75693bb0bb8c128c59f770991a1a759 100644
--- a/src/adql/translator/SQLServerTranslator.java
+++ b/src/adql/translator/SQLServerTranslator.java
@@ -456,7 +456,10 @@ public class SQLServerTranslator extends JDBCTranslator {
 		switch(fct.getType()) {
 			case TRUNCATE:
 				// third argument to round nonzero means do a truncate
-				return "round(convert(float, " + ((fct.getNbParameters() >= 2) ? (translate(fct.getParameter(0)) + ", " + translate(fct.getParameter(1))) : "") + "),1)";
+				if (fct.getNbParameters() >= 2)
+					return "round(convert(float, " + translate(fct.getParameter(0)) + "), convert(float, " + translate(fct.getParameter(1)) + "), 1)";
+				else
+					return "round(convert(float, " + translate(fct.getParameter(0)) + "), 0, 1)";
 			case MOD:
 				return ((fct.getNbParameters() >= 2) ? ("convert(float, " + translate(fct.getParameter(0)) + ") % convert(float, " + translate(fct.getParameter(1)) + ")") : "");
 			case ATAN2:
@@ -478,7 +481,10 @@ public class SQLServerTranslator extends JDBCTranslator {
 			case RADIANS:
 				return "radians(convert(float, " + translate(fct.getParameter(0)) + "))";
 			case ROUND:
-				return "round(convert(float, " + translate(fct.getParameter(0)) + ")" + ", " + translate(fct.getParameter(1)) + ")";
+				if (fct.getNbParameters() >= 2)
+					return "round(convert(float, " + translate(fct.getParameter(0)) + ")" + ", " + translate(fct.getParameter(1)) + ")";
+				else
+					return "round(convert(float, " + translate(fct.getParameter(0)) + ")" + ", 0)";
 
 			default:
 				return getDefaultADQLFunction(fct);