postgres

时间:2016-08-02 15:23:49

标签: ruby-on-rails ruby postgresql

我的CSV有一个名为name的字符串列,它有" 3个月面食"。

我想将其映射到现有的数据库表。 DB记录将其保存为" 3个月意大利面"。

如果我尝试Food.where(name: row['name']),它就会变空。因为它正在做一个直接字符串来比较" 3个月意大利面"和" 3个月意大利面"。

我也试过这个

Food.where('name LIKE ?', '%' + "3 months pasta" + '%')

除非我大写" p"哪个不起作用,我该怎样做才能让两端的字符串匹配?我想做一个row['name'].parameterize.underscore来获得单个案例和单一样式,然后从数据库中做同样的事情并匹配它们。问题是这样做可能会转换所有名称,然后进行比较。

我能做些什么来实现这个目标吗?

2 个答案:

答案 0 :(得分:2)

尝试

Food.where("lower(name) = ?", row['name'].downcase)

答案 1 :(得分:1)

虽然@Ursus的答案完全正确,但我会对DB进行本机不区分大小写搜索:

Food.where('name = ? COLLATE utf8_general_ci', "3 months pasta")
排序规则名称中的

ci代表“不区分大小写。”