【问题标题】:How to select only month from date field?如何从日期字段中仅选择月份?
【发布时间】:2013-06-17 14:56:16
【问题描述】:

我有一个付款数据库记录。在 date 字段中,我有来自日期选择器的所有 3 个选项 dd-month-year

现在我想知道一个月或任何特定日期的总付款提交。

   if($_POST['date']!='' ){
      $query ="SELECT SUM(submit) AS value_sum FROM payment where date='".$_POST['date']."' ";
      $result=mysql_query($query,$con);
      $row = mysql_fetch_assoc($result); 
      $sum = $row['value_sum'];
   }

如何从这张表中计算一个月的submit 总数?

我使用的月份:

<p class="name">
<td>
  <label for="name1">By Month</label>
</td>
<td>
<select name="month">
  <option>Month</option>
  <option value="JAN">January</option>
  <option value="FEB">February</option>
  <option value="MAR">March</option>
  <option value="APR">April</option>
  <option value="MAY">May</option>
  <option value="JUN">June</option>
  <option value="JUL">July</option>
  <option value="AUG">August</option>
  <option value="SEP">September</option>
  <option value="OCT">October</option>
  <option value="NOV">November</option>
  <option value="DEC">December</option>
</select>
</td>
</p>

【问题讨论】:

标签: php html mysql


【解决方案1】:

最好使用 MySQL 的 MONTH() 函数从 date 中提取月份。因此,假设您可以安排将 1 月作为 1 传递,将 2 月作为 2 传递,等等。使用类似的查询

SELECT SUM(submit) AS value_SUM
FROM payment
WHERE MONTH(date)=required_month
AND YEAR(date)=required_year

有空的时候看看 MySQL date and time functions

检查该链接后,我看到有一个 MONTHNAME 函数,如果您通过 1 月、2 月等,它会起作用。在这种情况下,查询是

SELECT SUM(submit) AS value_sum
FROM payment
WHERE MONTHNAME(date)=required_month
AND YEAR(date)=required_year

编辑在 Barmar 发表评论后将AND YEAR... 添加到两个查询中。当然,如果您确实想要所有 1 月份的总数,则可以将其省略。此外,如果您不想让您的用户指定当前年份,或者您希望它默认,请在您的 PHP 代码中安排 required_yearYEAR(CURRENT_DATE())

在下面的 OP 评论之后再次编辑,并考虑到他上面的评论,datevarchar

我假设$_POST['date']包含您想要总计的月份中的日期。将下面的行替换为您的行 `$query = ...'

$query =  'SELECT SUM(submit) AS value_sum FROM payment';
$query .= 'WHERE MONTH(CONVERT(datetime, date))';
$query .= '=MONTH(CONVERT(datetime,' . $_POST['date'] . '))';
$query .= 'AND YEAR(CONVERT(datetime, date))';
$query .= '=YEAR(CONVERT(datetime, ' . $_POST['date'] . '))';

【讨论】:

  • 这将结合不同年份的月份,这可能不是我们想要的。
  • 编辑后这个答案很合乎逻辑:从特定年份中选择特定月份毕竟是有意义的。
【解决方案2】:
$query ="SELECT SUM(submit) AS value_sum FROM payment where date LIKE '%".$_POST['date']."%' ";

通过这样的方式,您可以获得所有结果,例如,日期中包含“MAY”。

【讨论】:

    【解决方案3】:
    SELECT SUM(submit) AS value_sum FROM payment where date BETWEEN $_POST['date1'] AND     
    $_POST['date2'];
    

    【讨论】:

      猜你喜欢
      • 2021-01-07
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2016-12-15
      相关资源
      最近更新 更多