MariaDB 视图不工作,但语句不工作
MariaDB View not working but statement does
我的新托管服务提供商是 运行 MySQL 版本 10.0.31-MariaDB-cll-lve
我有一个视图在 MySQL 5.6 中运行良好,但在 MariaDB 中不起作用。
我创建了一个简单的缩减版本,只是为了说明导致错误的原因。
我可以创建视图,但我不能使用它:
CREATE VIEW `test_date`
AS select (case
when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59')
then '2018-06-30'
else NULL end) - interval 4 month
我在尝试打开时遇到的错误:
#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use
near '21:05:05 between 2018-01-01 00:00:00 and 2018-06-30 23:59:59)
then '2018-06-30' ' at line 1
我看不出有什么问题,它在普通 MySQL 服务器上运行良好。
我已经尝试删除“- interval 4 month”并且效果很好:
CREATE VIEW `test_date`
AS select case
when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59')
then '2018-06-30'
else NULL end
我试过用简单的数字替换日期,效果很好:
CREATE VIEW `test_date`
AS select (case
when (3 between 1 and 5)
then '2018-06-30'
else NULL end) - interval 4 month
那么这里真正的问题是什么?我被难住了。
'2018-06-30' 没有隐式转换为日期(我想这是 mysql 版本或 mariadb 的分支之间已经收紧的事情之一)尝试显式转换它。
drop view if exists test_date;
CREATE VIEW `test_date` AS
select (case when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59') then str_to_date('2018-06-30','%Y-%m-%d') else NULL end)
- interval 4 month;
select * from test_date;
+------------+
| Name_exp_1 |
+------------+
| 2018-02-28 |
+------------+
1 row in set (0.00 sec)
奇怪的是 select 单独工作正常,只有在视图中使用时(可能与 between 语句结合使用)它才不会
MariaDB [sandbox]> select (case
-> when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59')
-> then '2018-06-30'
-> else NULL end) - interval 4 month rd;
+------------+
| rd |
+------------+
| 2018-02-28 |
+------------+
1 row in set (0.00 sec)
在视图中使用时会抛出错误
MariaDB [sandbox]> create view test_date as
-> select
-> (
-> case when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59') then '2018-06-30'
-> else NULL
-> end
-> ) - interval 4 month as rd
-> ;
Query OK, 0 rows affected (0.04 sec)
MariaDB [sandbox]> select rd from test_date;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '08:16:57 between 2018-01-01 00:00:00 and 2018-06-30 23:59:59) then '2018-06-30' ' at line 1
如果把between语句换成>=,<=
MariaDB [sandbox]> create view test_date as
-> select
-> (
-> case when (now() >= '2018-01-01 00:00:00' and now() <= '2018-06-30 23:59:59') then '2018-06-30'
-> else NULL
-> end
-> ) - interval 4 month as rd
-> ;
Query OK, 0 rows affected (0.04 sec)
MariaDB [sandbox]> select rd from test_date;
+------------+
| rd |
+------------+
| 2018-02-28 |
+------------+
1 row in set (0.00 sec)
我的新托管服务提供商是 运行 MySQL 版本 10.0.31-MariaDB-cll-lve
我有一个视图在 MySQL 5.6 中运行良好,但在 MariaDB 中不起作用。
我创建了一个简单的缩减版本,只是为了说明导致错误的原因。
我可以创建视图,但我不能使用它:
CREATE VIEW `test_date`
AS select (case
when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59')
then '2018-06-30'
else NULL end) - interval 4 month
我在尝试打开时遇到的错误:
#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use
near '21:05:05 between 2018-01-01 00:00:00 and 2018-06-30 23:59:59)
then '2018-06-30' ' at line 1
我看不出有什么问题,它在普通 MySQL 服务器上运行良好。
我已经尝试删除“- interval 4 month”并且效果很好:
CREATE VIEW `test_date`
AS select case
when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59')
then '2018-06-30'
else NULL end
我试过用简单的数字替换日期,效果很好:
CREATE VIEW `test_date`
AS select (case
when (3 between 1 and 5)
then '2018-06-30'
else NULL end) - interval 4 month
那么这里真正的问题是什么?我被难住了。
'2018-06-30' 没有隐式转换为日期(我想这是 mysql 版本或 mariadb 的分支之间已经收紧的事情之一)尝试显式转换它。
drop view if exists test_date;
CREATE VIEW `test_date` AS
select (case when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59') then str_to_date('2018-06-30','%Y-%m-%d') else NULL end)
- interval 4 month;
select * from test_date;
+------------+
| Name_exp_1 |
+------------+
| 2018-02-28 |
+------------+
1 row in set (0.00 sec)
奇怪的是 select 单独工作正常,只有在视图中使用时(可能与 between 语句结合使用)它才不会
MariaDB [sandbox]> select (case
-> when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59')
-> then '2018-06-30'
-> else NULL end) - interval 4 month rd;
+------------+
| rd |
+------------+
| 2018-02-28 |
+------------+
1 row in set (0.00 sec)
在视图中使用时会抛出错误
MariaDB [sandbox]> create view test_date as
-> select
-> (
-> case when (now() between '2018-01-01 00:00:00' and '2018-06-30 23:59:59') then '2018-06-30'
-> else NULL
-> end
-> ) - interval 4 month as rd
-> ;
Query OK, 0 rows affected (0.04 sec)
MariaDB [sandbox]> select rd from test_date;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '08:16:57 between 2018-01-01 00:00:00 and 2018-06-30 23:59:59) then '2018-06-30' ' at line 1
如果把between语句换成>=,<=
MariaDB [sandbox]> create view test_date as
-> select
-> (
-> case when (now() >= '2018-01-01 00:00:00' and now() <= '2018-06-30 23:59:59') then '2018-06-30'
-> else NULL
-> end
-> ) - interval 4 month as rd
-> ;
Query OK, 0 rows affected (0.04 sec)
MariaDB [sandbox]> select rd from test_date;
+------------+
| rd |
+------------+
| 2018-02-28 |
+------------+
1 row in set (0.00 sec)