【问题标题】:Thinking sphinx string date attribute思考狮身人面像字符串日期属性
【发布时间】:2015-06-01 08:13:45
【问题描述】:

我有一个 TEXT 类型的列“值”。它可以包含常规文本,也可以包含字符串格式的日期。我用indexes value 索引列。我还可以添加一个将该列转换为整数的属性吗?我尝试了以下两种方法:

has "str_to_date(model.value, '%Y-%m-%d')", as: :value_as_date, type: :integer
has "CONVERT(model.value, DATETIME)", as: :value_as_date, type: :integer

谢谢

【问题讨论】:

    标签: sphinx thinking-sphinx


    【解决方案1】:

    这里有两种方法...... Sphinx 有一个时间戳(日期时间)数据类型的属性,所以你可以使用它:

    has "CONVERT(model.value, DATETIME)", as: :value_as_date, type: :timestamp
    

    或者,通过从字符串中提取日期,然后将 %Y%m%d 值转换为一个整数(注意,日期格式中没有连字符)。

    has "... more complex SQL snippet ...", as: :value_as_date, type: :integer
    

    在这种情况下,您还需要将过滤器的任何日期转换为相同格式的整数。

    除此之外:您将希望在您的 SQL sn-ps 中有一些东西来处理您的value 列包含的东西其他而不是日期的情况。或者也许值得将这些日期值拉到单独的列中以获得更一致的数据? (我知道,在不了解应用的完整上下文的情况下很容易提出建议。)

    【讨论】:

    • 好的,您的第一个解决方案有效,因为类型是“时间戳”而不是“整数”。为什么整数在这种情况下不起作用?
    • 如果你希望它是一个整数,你必须让 SQL 提供一个整数:)
    • 对。我以为 Sphinx 总是把它翻译成整数......谢谢。
    • 这是一个公平的观点......确实如此。我忘记了它确实需要一个时间戳整数(自 1970 年 1 月 1 日以来的秒数),但配置时的数据类型仍然是“时间戳”而不是“整数”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多