【问题标题】:SQL search date range in part of text field部分文本字段中的 SQL 搜索日期范围
【发布时间】:2013-09-20 12:02:27
【问题描述】:

我在 SQL 数据库中有一个文本字段,其日期通常为 1897 年 1 月 13 日,但可能只是 1962 年或 2013 年 1 月或 1956 年等。

我希望能够在年份范围内进行 WHERE。例如。从 1945 年到 1987 年。

我意识到可能很难满足所有格式的数据。如果它只满足以下条件,我会很高兴: 1972 年 2 月 13 日、1972 年 2 月和 1972 年

【问题讨论】:

  • 您使用的是哪个 DBMS?

标签: sql date range where


【解决方案1】:

如果您关心的唯一日期格式与上述类似,并且您只想要年份,那么看起来您可以只使用值的最后 4 个字符。

在 SQL Server 中:

RIGHT(datefield,4)

或者在大多数语言中(包括 SQL Server):

SUBSTRING(datefield,LEN(datefield)-3,4)

在 ANSI SQL 中:

MID(datefield,LEN(datefield)-3,4)

【讨论】:

  • MySQL 不喜欢上面的子字符串。我的代码: if (!empty($fromyear) && !empty($toyear)) { $query1.= " AND SUBSTRING(date,LEN(date)-3,4) 在 $fromyear 和 $toyear 之间";它说LEN功能不存在。
  • 我让它工作使用: if (!empty($fromyear) && !empty($toyear)) { $query1.= " AND RIGHT(date,4) 在 $fromyear 和 $toyear 之间";
【解决方案2】:

假设您使用的是 MySQL。如果您希望能够通过适当的日期比较查询您的表,您可能需要创建一个具有 DATETIME 类型的新字段,并使用从当前字段生成的 DATETIMES 填充它。你需要这样的查询:

UPDATE _TABLE_ set NEW_DATETIME_FIELD = STR_TO_DATE(_CURRENT_FIELD_, '%Y') where CHAR_LENGTH(_CURRENT_FIELD_) = 4;

上述查询适用于值在 _CURRENT_FILED_ 中的记录,例如“1945”。您需要针对当前字段中获得的每种日期字符串类型运行此查询。

新的 DATETIME 字段将允许您正确使用 MySQL date functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多