Rails查询中SQL Server日期格式转换及匹配问题
解决ActiveRecord查询当天文章的日期匹配问题
嘿,我一眼就瞅出你问题出在哪啦!你之前写的CONVERT(date,GETDATE()) = ?其实是拿数据库服务器的当前日期和Date.today做比较,这俩本来就是同一天啊,自然会返回所有条目——完全没用到created_at字段嘛!
下面给你几个靠谱的解决方案,按推荐程度排序:
1. 用Rails原生的日期范围查询(最推荐)
Rails提供了超方便的all_day方法,它会自动帮你生成匹配当天00:00到23:59:59的查询条件,跨数据库兼容,不用写原生SQL:
@articles = Article.where(created_at: Date.today.all_day)
这个方法会根据你用的数据库(比如SQL Server、MySQL、PostgreSQL)自动生成对应的SQL语句,既安全又省心。
2. 针对SQL Server的原生SQL写法(如果你一定要用函数的话)
要是你坚持手动转换created_at的日期格式,得把函数作用在created_at字段上,而不是GETDATE():
@articles = Article.where('CONVERT(date, created_at) = ?', Date.today)
这样就会把每条记录的created_at转换成纯日期格式,再和今天的日期做匹配,就能精准筛选出当天创建的文章了。
小提醒
尽量优先用Rails提供的查询接口,少写原生SQL——一来能避免语法错误,二来切换数据库时不用修改查询代码,维护起来轻松不少。
内容的提问来源于stack exchange,提问作者Dark Knight
相关产品推荐
相关产品推荐

