4

YAML を格納する TEXT 列「設定」を持つテーブル「顧客」があるとします。show_emailYAML は、 、 、 などのlikes_to_party属性を持つハッシュ/辞書/マップlast_changed_prefs_atです。MySQL でこの YAML データをクエリして、たとえば、持っているすべての顧客を返す方法はありますcustomers.preferences["likes_to_party"] == trueか?

ただし、実際にはシリアル化された日付フィールドがあり、それが何らかの日付間隔に属しているかどうかを知りたいため、さらに複雑になります。customers.preferences["last_changed_prefs_at"].between(some_date, some_other_date) == true

私は最初に正規表現を考えています..しかし、それはかなりハックです。

4

1 に答える 1

4

を使用して、SUBSTRING()かなり醜いハックを作成することができました。LOCATE()UNIX_TIMESTAMP()

UNIX_TIMESTAMP(
  SUBSTRING(customers.preferences, 
    LOCATE(\"last_changed_prefs_at\", cusstomers.preferences) + 22, 29)
) BETWEEN UNIX_TIMESTAMP(:period_start) AND UNIX_TIMESTAMP(:period_end)
于 2012-07-30T15:02:38.583 に答える