You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用csvsql执行SQL查询时无法切换至MySQL dialect,出现函数报错

解决csvsql查询时SQLite不支持MONTH/YEAR函数的问题

问题分析

使用csvsql的--query参数执行查询时,工具默认采用SQLite作为底层引擎,但SQLite没有MySQL的MONTH()和YEAR()日期函数,因此会触发no such function: MONTH错误。同时无法通过--dialect mysql切换方言,因为该参数与--query互斥,会提示The --dialect option is only valid when neither --db nor --query are specified。

解决方案

改用SQLite原生的strftime()函数提取月份和年份,替代MySQL的MONTH()和YEAR()。SQLite的strftime()通过格式化字符串来获取日期组件:

  • %m:返回两位数字的月份(01-12)
  • %Y:返回四位数字的年份

修改后的命令

csvsql -d ";"  --query "SELECT ID_PROPOSTA FROM acomp_obras_contratos_medicoes_modulo_empresas WHERE strftime('%m', DATA_INICIO_MEDICAO_OBJETO_ACOMPANHAMENTO_OBRA) = '10' AND strftime('%Y', DATA_INICIO_MEDICAO_OBJETO_ACOMPANHAMENTO_OBRA) = '2010'" acomp_obras_contratos_medicoes_modulo_empresas.csv

补充说明

  • 原命令中使用LIKE匹配数值并不合适,直接用=进行字符串匹配更准确(因为strftime()返回的是字符串类型)
  • 确保CSV中的DATA_INICIO_MEDICAO_OBJETO_ACOMPANHAMENTO_OBRA字段是SQLite可识别的日期格式(如YYYY-MM-DD、YYYY/MM/DD等),否则strftime()无法正常解析

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:40:00