MySQL 5.6正常的视图在MariaDB 10.0.31中创建成功但无法使用
解决MariaDB 10.0.31中视图日期运算的语法解析问题
我之前也踩过这个版本MariaDB的语法坑,这大概率是它的SQL解析器在处理CASE表达式与后续日期算术运算时的优先级识别问题。
问题根源
在你的场景里,MariaDB 10.0.31没有正确识别CASE表达式的完整范围,它把CASE的结果和后面的- interval 4 month拆成了错误的语法片段,导致解析报错。而MySQL 5.6的解析器对这种写法的兼容性更强,所以能正常运行。
两种可行的解决方案
方案1:给CASE表达式加外层括号
通过括号明确CASE表达式的边界,让MariaDB先完整计算CASE的结果,再执行日期减法:
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;
方案2:将日期运算移到CASE的THEN分支里
把减法逻辑整合到CASE的结果中,既避免解析问题,逻辑也更直观:
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' - interval 4 month else NULL end;
这两种写法都能在你的MariaDB版本中正常创建并访问视图,同时也兼容MySQL 5.6的环境。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

