【问题标题】:Look up a date between two database fields在两个数据库字段之间查找日期
【发布时间】:2012-11-21 16:37:53
【问题描述】:

您好,我有一段代码在数据库中的 year_start 和 year_end 字段之间查找一年。

这是我的代码。

  SELECT * from $tableName where '$year' BETWEEN start_year AND end_year; LIMIT $start, $limit

现在这似乎工作正常,除非年份等于 end_year 值,例如,如果我正在搜索 2002 并且年末值为 2002,那么它不会返回任何结果。

任何建议将不胜感激。

谢谢

【问题讨论】:

  • 在我看来你正在寻找MySQL “between” clause not inclusive?
  • BETWEEN 应该返回端点结果。 start_yearend_year的数据类型和实际内容是什么?它们是 DATETIME 吗?
  • 嗨,谢谢,不,它们只是 varchars
  • 在这种情况下你必须CAST他们
  • 对不起,这是什么意思?,谢谢,我刚刚用谷歌搜索了它

标签: php mysql


【解决方案1】:

如果start_yearend_year 类型是

INT

$sql = '
SELECT *
FROM '.$tableName.'
WHERE TRUE
  AND '.$year.' BETWEEN start_year AND end_year
LIMIT '.$start.', '.$limit.'
;
';

日期

$sql = '
SELECT *
FROM '.$tableName.'
WHERE TRUE
  AND '.$year.' BETWEEN YEAR(start_year) AND YEAR(end_year)
LIMIT '.$start.', '.$limit.'
;
';

VARCHAR
需要投射它们

$sql = '
SELECT *
FROM '.$tableName.'
WHERE TRUE
  AND '.$year.' BETWEEN
    CAST(start_year AS UNSIGNED) AND CAST(end_year AS UNSIGNED)
LIMIT '.$start.', '.$limit.'
;
';

【讨论】:

    【解决方案2】:

    只需在执行查询之前比较 start_year 和 end_year。

    // If they're the same,
    If start_year == end_year{
      select * from $tableName where '$year' = start_year; LIMIT $start, $limit;
      // more code
    }
    
    // if not, use your query
    else{
      SELECT * from $tableName where '$year' BETWEEN start_year AND end_year; LIMIT $start, $limit;
      // more code
    }
    

    不是最漂亮的解决方案,但仍然是一个不错的解决方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多