You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

适配MariaDB的SQL语句中CONVERT()函数改写方案咨询

解决SQL Anywhere到MariaDB的CONVERT语句迁移问题

首先,先搞清楚你提到的参数100是什么意思:
在SQL Anywhere中,CONVERT()函数的第三个参数是日期/时间格式代码100对应的是带AM/PM的美式日期时间格式,输出样式类似:Oct 15 2024 9:30AM

接下来解释你遇到的报错原因:
MariaDB的CONVERT()语法确实只支持两个参数(值 + 目标数据类型),它只能做数据类型转换,不支持像SQL Anywhere那样通过第三个参数指定日期格式。你尝试的CONVERT((a.time_started, 100), CHAR)写法不符合MariaDB的语法规范,所以会报错。

正确的MariaDB写法

要实现和原语句相同的效果,你需要用MariaDB的DATE_FORMAT()函数来指定日期格式(因为它专门负责日期时间的格式化输出),然后如果需要转成CHAR类型,直接用CONVERT()包裹即可(不过DATE_FORMAT()本身返回的就是字符串,所以也可以省略CONVERT()):

推荐写法(直接格式化):

DATE_FORMAT(a.time_started, '%b %d %Y %h:%i%p') AS 'Waiting Since'

带CONVERT的写法(如果需要明确转CHAR类型):

CONVERT(DATE_FORMAT(a.time_started, '%b %d %Y %h:%i%p'), CHAR) AS 'Waiting Since'

格式符对应说明

这里的%b %d %Y %h:%i%p完全对应SQL Anywhere中100的格式:

  • %b:缩写月份名称(如Jan、Oct)
  • %d:两位数字的日期(01-31)
  • %Y:四位数字的年份
  • %h:12小时制的小时(01-12)
  • %i:两位数字的分钟(00-59)
  • %p:大写的AM/PM标识

内容的提问来源于stack exchange,提问作者Muirik

火山引擎 最新活动