Go语言SQL查询中Timestamp日期范围语法错误求助
问题原因及解决方案
1. 原始查询语句的语法错误
你的Go代码中,SQL语句末尾存在多余的语法符号:
// 错误写法,末尾多了 `);)` `SELECT products.*, user_activities.action_id, user_activities.created_at FROM products JOIN user_activities on ( user_activities.action_id=$1 AND user_activities.product_id=products.id AND user_activities.created_at between $2 and $3);)`
ON子句的条件已经用括号闭合,语句末尾不需要额外的);),直接保留闭合括号即可,修正后:
rows, err := r.db.Query( `SELECT products.*, user_activities.action_id, user_activities.created_at FROM products JOIN user_activities on ( user_activities.action_id=$1 AND user_activities.product_id=products.id AND user_activities.created_at between $2 and $3)`, action_id, "2022-08-24", "2022-08-26")
2. 日期转换的笔误问题
你尝试的日期转换语句存在字段名和类型转换的错误:
// 错误写法:字段名写错,转换类型错误 user_activities.created::date_at between $2::date and $3::date)
正确的写法应该是使用字段created_at,并转换为date类型:
user_activities.created_at::date between $2::date and $3::date
验证说明
你提到在线测试环境能正常运行,是因为在线环境中没有这些语法错误(多余的括号/分号、字段名笔误),修正上述问题后,Go代码中的查询即可正常执行。
内容的提问来源于stack exchange,提问作者1oko
相关产品推荐
相关产品推荐

