diff --git a/test/cases/function/func_coalesce_1.sql b/test/cases/function/func_coalesce_1.sql
new file mode 100644
index 0000000000000000000000000000000000000000..c20fe5c732f7211ab4156fec1052aee82db6c59c
--- /dev/null
+++ b/test/cases/function/func_coalesce_1.sql
@@ -0,0 +1,132 @@
+
+-- test coalesce function
+
+drop table if exists t1;
+create table t1(
+a int,
+b varchar(25)
+);
+
+insert into  t1 values (0, 'a');
+insert into  t1 values (1, NULL);
+insert into  t1 values (NULL, NULL);
+insert into  t1 values (null, 'b');
+
+select * from t1;
+select coalesce(a, 1) from t1;
+-- echo error
+select coalesce(b, 1) from t1;
+
+-- @bvt:issue#4744
+select coalesce(b, '1') from t1;
+-- @bvt:issue
+
+drop table t1;
+
+
+drop table if exists t2;
+create table t2(
+a float,
+b datetime
+);
+
+insert into t2 values (12.345, '2022-02-20 10:10:10.999999');
+insert into t2 values (3.45646, NULL);
+insert into t2 values(NULL, '2023-04-03 22:10:29.999999');
+insert into t2 values (NULL, NULL);
+
+select * from t2;
+select coalesce(a, 1.0) from t2;
+select coalesce(a, 1) from t2;
+
+-- @bvt:issue#4744
+select coalesce(b, 2022-01-01) from t2;
+select coalesce(b, 2022) from t2;
+select coalesce(b, 2) from t2;
+-- @bvt:issue
+
+
+select coalesce(b, '2022-10-01') from t2;
+select coalesce(b, '2022-10-01 10:10:10.999999') from t2;
+
+-- echo error
+select coalesce(b, '2022') from t2;
+
+-- echo error
+select coalesce(b, '2022/10/01') from t2;
+drop table t2;
+
+
+drop table if exists t3;
+create table t3(
+a bool,
+b text
+);
+
+insert into t3 values (0, 'a');
+insert into t3 values (1, 'b');
+insert into t3 values (NULL, 'c');
+insert into t3 values (TRUE, NULL);
+insert into t3 values (NULL, NULL);
+
+select * from t3;
+
+select coalesce(a, 1) from t3;
+select coalesce(a, 0) from t3;
+-- echo error
+select coalesce(a, 200) from t3;
+
+-- @bvt:issue#4744
+select coalesce(b, '1') from t3;
+select coalesce(b, 'bull') from t3;
+-- @bvt:issue
+
+drop table t3;
+
+
+-- test create view
+drop table if exists t4;
+create table t4 (f1 date, f2 datetime, f3 varchar(20));
+
+drop view if exists view_t1;
+create view view_t1 as select coalesce(f1,f1) as f4 from t4;
+desc view_t1;
+drop view view_t1;
+
+drop view if exists view_t2;
+create view view_t2 as select coalesce(f1,f2) as f4 from t4;
+desc view_t2;
+drop view view_t2;
+
+
+drop view if exists view_t3;
+create view view_t3 as select coalesce(f2,f2) as f4 from t4;
+desc view_t3;
+drop view view_t3;
+
+-- @bvt:issue#4755
+drop view if exists view_t4;
+create view view_t4 as select coalesce(f1,f3) as f4 from t4;
+desc view_t4;
+drop view view_t4;
+-- @bvt:issue
+
+-- @bvt:issue#4755
+drop view if exists view_t5;
+create view view_t5 as select coalesce(f2,f3) as f4 from t4;
+desc view_t5;
+drop view view_t5;
+-- @bvt:issue
+
+drop table t4;
+
+
+-- @bvt:issue#3588
+drop table if exists t5;
+CREATE TABLE t5 (b datetime);
+
+INSERT INTO t5 VALUES ('2010-01-01 00:00:00'), ('2010-01-01 00:00:00');
+SELECT * FROM t5 WHERE b <= coalesce(NULL, now());
+
+DROP TABLE t5;
+-- @bvt:issue
diff --git a/test/result/function/func_coalesce_1.result b/test/result/function/func_coalesce_1.result
new file mode 100644
index 0000000000000000000000000000000000000000..857464c0a5f44fff599d43fbd3c00da9c28f11e4
--- /dev/null
+++ b/test/result/function/func_coalesce_1.result
@@ -0,0 +1,179 @@
+drop table if exists t1;
+create table t1(
+a int,
+b varchar(25)
+);
+insert into  t1 values (0, 'a');
+insert into  t1 values (1, NULL);
+insert into  t1 values (NULL, NULL);
+insert into  t1 values (null, 'b');
+select * from t1;
+a    b
+0    a
+1    null
+null    null
+null    b
+select coalesce(a, 1) from t1;
+coalesce(a, 1)
+0
+1
+1
+1
+select coalesce(b, 1) from t1;
+Can't cast column from VARCHAR type to BIGINT type because of one or more values in that column.
+select coalesce(b, '1') from t1;
+coalesce(b, 1)
+a
+
+
+b
+drop table t1;
+drop table if exists t2;
+create table t2(
+a float,
+b datetime
+);
+insert into t2 values (12.345, '2022-02-20 10:10:10.999999');
+insert into t2 values (3.45646, NULL);
+insert into t2 values(NULL, '2023-04-03 22:10:29.999999');
+insert into t2 values (NULL, NULL);
+select * from t2;
+a    b
+12.345    2022-02-20 10:10:11
+3.45646    null
+null    2023-04-03 22:10:30
+null    null
+select coalesce(a, 1.0) from t2;
+coalesce(a, 1.0)
+12.345000267028809
+3.4564599990844727
+1.0
+1.0
+select coalesce(a, 1) from t2;
+coalesce(a, 1)
+12.345000267028809
+3.4564599990844727
+1.0
+1.0
+select coalesce(b, 2022-01-01) from t2;
+coalesce(b, 2022 - 1 - 1)
+2022-02-20 10:10:11
+
+2023-04-03 22:10:30
+
+select coalesce(b, 2022) from t2;
+coalesce(b, 2022)
+2022-02-20 10:10:11
+
+2023-04-03 22:10:30
+
+select coalesce(b, 2) from t2;
+coalesce(b, 2)
+2022-02-20 10:10:11
+
+2023-04-03 22:10:30
+
+select coalesce(b, '2022-10-01') from t2;
+coalesce(b, 2022-10-01)
+2022-02-20 10:10:11
+2022-10-01 00:00:00
+2023-04-03 22:10:30
+2022-10-01 00:00:00
+select coalesce(b, '2022-10-01 10:10:10.999999') from t2;
+coalesce(b, 2022-10-01 10:10:10.999999)
+2022-02-20 10:10:11
+2022-10-01 10:10:10
+2023-04-03 22:10:30
+2022-10-01 10:10:10
+select coalesce(b, '2022') from t2;
+Can't cast '2022' from VARCHAR type to DATETIME type.
+select coalesce(b, '2022/10/01') from t2;
+Can't cast '2022/10/01' from VARCHAR type to DATETIME type.
+drop table t2;
+drop table if exists t3;
+create table t3(
+a bool,
+b text
+);
+insert into t3 values (0, 'a');
+insert into t3 values (1, 'b');
+insert into t3 values (NULL, 'c');
+insert into t3 values (TRUE, NULL);
+insert into t3 values (NULL, NULL);
+select * from t3;
+a    b
+false    a
+true    b
+null    c
+true    null
+null    null
+select coalesce(a, 1) from t3;
+coalesce(a, 1)
+false
+true
+true
+true
+true
+select coalesce(a, 0) from t3;
+coalesce(a, 0)
+false
+true
+false
+true
+false
+select coalesce(a, 200) from t3;
+Can't cast '200' from BIGINT type to BOOL type.
+select coalesce(b, '1') from t3;
+coalesce(b, 1)
+a
+b
+c
+
+
+select coalesce(b, 'bull') from t3;
+coalesce(b, bull)
+a
+b
+c
+
+
+drop table t3;
+drop table if exists t4;
+create table t4 (f1 date, f2 datetime, f3 varchar(20));
+drop view if exists view_t1;
+create view view_t1 as select coalesce(f1,f1) as f4 from t4;
+desc view_t1;
+Field    Type    Null    Key    Default    Comment
+f4    DATE    YES        NULL
+drop view view_t1;
+drop view if exists view_t2;
+create view view_t2 as select coalesce(f1,f2) as f4 from t4;
+desc view_t2;
+Field    Type    Null    Key    Default    Comment
+f4    DATETIME    YES        NULL
+drop view view_t2;
+drop view if exists view_t3;
+create view view_t3 as select coalesce(f2,f2) as f4 from t4;
+desc view_t3;
+Field    Type    Null    Key    Default    Comment
+f4    DATETIME    YES        NULL
+drop view view_t3;
+drop view if exists view_t4;
+create view view_t4 as select coalesce(f1,f3) as f4 from t4;
+desc view_t4;
+Field    Type    Null    Key    Default    Comment
+f4    DATE    YES        NULL
+drop view view_t4;
+drop view if exists view_t5;
+create view view_t5 as select coalesce(f2,f3) as f4 from t4;
+desc view_t5;
+Field    Type    Null    Key    Default    Comment
+f4    DATETIME    YES        NULL
+drop view view_t5;
+drop table t4;
+drop table if exists t5;
+CREATE TABLE t5 (b datetime);
+INSERT INTO t5 VALUES ('2010-01-01 00:00:00'), ('2010-01-01 00:00:00');
+SELECT * FROM t5 WHERE b <= coalesce(NULL, now());
+Operator '<=' with parameters [DATETIME TIMESTAMP] will be implemented in future version.
+DROP TABLE t5;
\ No newline at end of file