diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index decb42b973d5e436f9d995abcec5a2dd360638bc..79b06078665a244fa93d97a1591521c1f9e4bfe8 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -417,6 +417,12 @@ sql_type_result(enum field_type lhs, enum field_type rhs)
 		       rhs == FIELD_TYPE_UNSIGNED);
 		return FIELD_TYPE_UNSIGNED;
 	}
+	if ((lhs == FIELD_TYPE_DATETIME && rhs == FIELD_TYPE_DATETIME) ||
+	    (lhs == FIELD_TYPE_INTERVAL && rhs == FIELD_TYPE_INTERVAL))
+		return FIELD_TYPE_INTERVAL;
+	if ((lhs == FIELD_TYPE_INTERVAL && rhs == FIELD_TYPE_DATETIME) ||
+	    (lhs == FIELD_TYPE_DATETIME && rhs == FIELD_TYPE_INTERVAL))
+		return FIELD_TYPE_DATETIME;
 	return FIELD_TYPE_SCALAR;
 }
 
diff --git a/test/sql-luatest/datetime_test.lua b/test/sql-luatest/datetime_test.lua
index ad04e4adecf93fd0438bc49d31e32cef4acd182d..70bdd6ad4d2e029ca9b3486e315d6afc086d7593 100644
--- a/test/sql-luatest/datetime_test.lua
+++ b/test/sql-luatest/datetime_test.lua
@@ -2860,3 +2860,47 @@ g.test_datetime_34_3 = function()
         t.assert_equals(box.execute(sql).rows, {{dt1}})
     end)
 end
+
+-- Properly compute type of result of DATETIME arithmetic.
+g.test_datetime_35 = function()
+    g.server:exec(function()
+        local t = require('luatest')
+        local dt = require('datetime')
+        local dt1 = dt.new({year = 1})
+        local itv1 = dt.interval.new({year = 1})
+
+        box.execute([[CREATE TABLE t(dt DATETIME PRIMARY KEY, itv INTERVAL);]])
+        box.execute([[INSERT INTO t VALUES (?, ?);]], {dt1, itv1})
+
+        local sql = [[SELECT typeof(dt - dt) FROM t;]]
+        t.assert_equals(box.execute(sql).rows, {{'interval'}})
+
+        sql = [[SELECT dt - dt FROM t;]]
+        t.assert_equals(box.execute(sql).metadata[1].type, 'interval')
+
+        sql = [[SELECT typeof(dt - itv) FROM t;]]
+        t.assert_equals(box.execute(sql).rows, {{'datetime'}})
+
+        sql = [[SELECT dt - itv FROM t;]]
+        t.assert_equals(box.execute(sql).metadata[1].type, 'datetime')
+
+        sql = [[SELECT typeof(dt + itv) FROM t;]]
+        t.assert_equals(box.execute(sql).rows, {{'datetime'}})
+
+        sql = [[SELECT dt + itv FROM t;]]
+        t.assert_equals(box.execute(sql).metadata[1].type, 'datetime')
+
+        sql = [[SELECT typeof(itv - itv) FROM t;]]
+        t.assert_equals(box.execute(sql).rows, {{'interval'}})
+
+        sql = [[SELECT itv - itv FROM t;]]
+        t.assert_equals(box.execute(sql).metadata[1].type, 'interval')
+
+        sql = [[SELECT typeof(itv + itv) FROM t;]]
+        t.assert_equals(box.execute(sql).rows, {{'interval'}})
+
+        sql = [[SELECT itv + itv FROM t;]]
+        t.assert_equals(box.execute(sql).metadata[1].type, 'interval')
+        box.execute([[DROP TABLE t;]])
+    end)
+end