【问题标题】:how to select quarterly data in sql如何在sql中选择季度数据
【发布时间】:2015-03-18 08:21:17
【问题描述】:

如何按季度获取数据?我有这个 html 让用户选择他/她想要的季度。

<select name="quarterly">
  <option value="2015-01">Quarter1</option>
  <option value="2015-04">Quarter2</option>
  <option value="2015-07">Quarter3</option>
  <option value="2015-10">Quarter4</option>
</select>

我应该如何使用 QUARTER() 函数并按季度返回我的数据?

这是我使用 CI 进行的查询。

$quarter_val = $this->input->get('quarterly');
$this->db->select('ainoheads, aittlperweight, aittlperclass')
         ->from('main_data')
         ->where('QUARTER(ai_ordDate)', $quarter_val);

【问题讨论】:

  • 请给我们您的表结构。
  • 只是说这些是“ai_id, ainoheads, aittlperweight, aittlperclass, ai_ordDate”列
  • ainoheads、aittlperweight 和 aittlperclass 是 int 而 ai_ordDate 是日期

标签: php sql codeigniter


【解决方案1】:

QUARTER 返回一个介于 1 和 4 之间的整数。您可能想要这样:

<select name="quarterly">
  <option value="1">Quarter1</option>
  <option value="2">Quarter2</option>
  <option value="3">Quarter3</option>
  <option value="4">Quarter4</option>
</select>

【讨论】:

  • 只需在上面进行更改即可解决问题,而无需更改 PHP 代码。
【解决方案2】:

如果我在http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_quarter 上正确阅读,那么你必须这样做

SELECT ainoheads, aittlperweight, aittlperclass FROM main_data WHERE QUARTER(ai_ordDate) = "$quarter_val";

【讨论】:

  • 它返回数据,但我不确定这些数据是否是选定的季度,我会先检查它,然后将其标记为答案谢谢!。
  • 好吧,我在发布awser之前测试了我的phpMyAdmin,我还选择了日期的CUARTER,一切正常。
  • MySQL QUARTER() 函数将返回一个介于 1 和 4 之间的数字。在 OP 中,$quarter_val 永远不会匹配此值,除非您还进行了 @sg- 建议的更改。请陈述你的假设。
  • 当然,它必须是一个介于 1 和 4 之间的数字,不是吗?
  • 是的,如果我改变选项的值,比如@sg推荐tnx!
【解决方案3】:

您可以转换选定的季度选项,然后从中提取数字季度:

$quarter_val = $this->input->get('quarterly');
$newformat = date('Y-m',$quarter_val);
$currMonth = date("m", $newformat);
$currQuarter = ceil($currMonth/3);

$this->db->select('ainoheads, aittlperweight, aittlperclass')
         ->from('main_data')
         ->where('QUARTER(ai_ordDate)', $currQuarter);

您的 SQL 查询看起来不错,我没有更改它。

【讨论】:

    【解决方案4】:

    要获得特定年份的季度,我会这样做

    首先我像这样改变值

    <select name="quarterly">
       <option value="1,2015">Quarter1</option>
       <option value="2,2015">Quarter2</option>
       <option value="3,2015">Quarter3</option>
       <option value="4,2015">Quarter4</option>
    </select>
    

    (我循环选择以获取其他年份)

    然后在后端我执行此代码。

    $quarter_val = $this->input->get('quarterly');
    $explode_quar = explode(",",$quarter_val); //returns Array ( [0] => 1 [1] => 2015 )
    
    $this->db->select('ainoheads, aittlperweight, aittlperclass')
             ->from('main_data')
             ->where('YEAR(ai_ordDate)', $explode_quar[1])
             ->where('QUARTER(ai_ordDate)', $explode_quar[0])
             ->get();
    

    感谢@hans、@tim 和 @sg.. 的帮助。

    【讨论】:

      【解决方案5】:

      Quarter_val 1 将带来 1 月、2 月和 3 月的月份 $quarter_val = 1; $query=mysqli_query($link,"SELECT DATE_FORMAT(Starting_Date,'%M %Y') as month FROM student WHERE QUARTER(Starting_Date)='$quarter_val' AND YEAR(Starting_Date)='$year'") or die(mysqli_error($link));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 2021-04-14
        • 2020-02-07
        • 1970-01-01
        相关资源
        最近更新 更多