4

假设我有一个表“Customers”,它有一个 TEXT 列“preferences”,我在其中存储 YAML。show_emailYAML 是具有,likes_to_party和等属性的 Hash/Dictionary/Map 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

我最初在想正则表达式..但这很hacky。

4

1 回答 1

4

通过使用SUBSTRING(),我能够构建一个相当丑陋的 hack 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 回答