我的新主机提供商运行的是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
那么这里真正的问题是什么?我被难住了。
1条答案
按热度按时间vhmi4jdf1#
“2018-06-30”并不是隐式转换为日期(我猜这是mysql版本或是mariadb的fork版本之间被收紧的事情之一),请尝试显式转换它。
奇怪的是,select单独工作很好,只有在视图中使用时(可能与between语句结合使用),它才不会工作
在视图中使用时会引发错误
如果between语句替换为>=,<=