0

我有一个新餐馆列表,我想使用电话号码将它们与餐馆数据库进行核对。电话号码的问题在于它们在数据库中具有不同的格式(即123-345-6789(123)-456 8988)。

到目前为止,我已经为手机创建了一个索引,以便快速搜索它们。我还删除了新餐厅的电话号码,以便它们只包含数值 (0-9)。

现在,我想在比较之前删除数据库的数字,以便严格比较数字。

#strip the phone of non-numeric values and spaces
formatted_phone = SunspotHelper.sanitize_term(pr.phone).gsub(/\s+/, "") 

Restaurant.where(contact_phone: formatted_phone).each do |r|
  #irrelevant code here
end

上面代码的问题是contact_phone(来自数据库)将采用非剥离格式。到目前为止,我的研究使我相信我必须使用类似的东西REGEXP_LIKE,但我不太确定如何使用 Rails 来实现它。我不想更新数据库 - 我只是想剥离数字进行比较,同时仍将原始格式保留在数据库中。

在与 进行比较之前,如何从数据库中去除电话号码contact_phone的非数字值formatted_phone

4

1 回答 1

1

如果您只想将工作量限制在 Rails 查询上(而不是在数据库的另一个字段中正确格式化电话号码),那么您可以使用数据库引擎的 REGEXP 功能

Restaurant.where(["REGEXP_REPLACE(contact_phone, '[^[:digit:]]', '') = ?", formatted_phone]).each do |r|
  #irrelevant code here
end
于 2012-11-01T22:38:31.263 回答