【问题标题】:select distinct (extract(year from saledate) || extract(month from saledate)) as ym from trnsact order by ym;select distinct (extract(year from saledate) || extract(month from saledate)) as ym from trnsact order by ym;
【发布时间】:2017-01-04 08:00:38
【问题描述】:

正在处理一个练习题“数据库中每个月/年组合的事务表的 saledate 列中有多少个不同的日期?”我发现了一个有效的查询,它显然结合了 YEAR 和 MONTH

SELECT DISTINCT (extract(year from saledate) || extract(month from saledate)) as SaleDate
FROM trnsact
ORDER BY SaleDate; 

但是 ||不是我们学到的东西,我在任何地方都找不到语法、描述或示例。谁能解释一下?

【问题讨论】:

  • 正如你所说,它只是将多个值连接成一个值。您可以删除它并使用逗号代替 2 个字段。
  • 这不是 MySQL 语法的一部分,这就是原因。它属于另一种方言。另外,请注意 DISTINCT 不是函数

标签: mysql extract teradata


【解决方案1】:

||是字符串连接命令。在您给我们的这个查询中,数字被转换成字符串,然后被连接起来。

恐怕解决方案是有效的。

另一种解决方案是:

select extract( year from saledate) as year_num, 
       extract( month from saledate) as month_num
  from trnsact
group by extract( year from saledate ), 
         extract( month from saledate);

【讨论】:

  • 谢谢!必须将 year 更改为 year_num 并将 month 更改为 month_num,因为我不能使用 year 和 month 作为关键字,但它可以工作,而且我了解该查询是如何工作的!
【解决方案2】:
SELECT saledate from trnsact group by YEAR(saledate), MONTH(saledate);

【讨论】:

    【解决方案3】:

    如果有人参加与我相同的课程,请按照他们所说的我们应该在查询结果中看到的那样找到每月/每年组合的天数:

    SELECT EXTRACT(YEAR from saledate) as year_num, EXTRACT(MONTH from saledate) as month_num, COUNT(DISTINCT EXTRACT(DAY from saledate)) as day_ct
    FROM trnsact
    GROUP BY EXTRACT(YEAR from saledate), EXTRACT(MONTH from saledate)
    ORDER BY year_num, month_num;
    

    【讨论】:

      【解决方案4】:

      我也认为我们需要这个查询。

      SELECT EXTRACT(YEAR from saledate) as year_num, EXTRACT(MONTH from saledate) as month_num, COUNT(DISTINCT EXTRACT(DAY from saledate)) as day_ct FROM trnsact GROUP BY EXTRACT(YEAR from saledate), EXTRACT(MONTH from saledate) ORDER BY year_num, month_num;

      但不确定它是否有效。你试过吗?

      【讨论】:

        【解决方案5】:

        这真的让我对杜克在线课程感到困扰,我认为你也在其中。我在论坛上找到了 Chris Dunley Mentor 回复的近期:

        您不能假设连接年份月份的格式是“2005 8”。这是一个常见的错误。我更喜欢简单地排除 2005 年 7 月 31 日之后的所有数据,但您也可以使用 AND/OR 测试。如果你想使用加入的文本,你可以这样做

        WHERE YEAR_MONTH'EXTRACT(YEAR from '2005-08-01')||EXTRACT(MONTH from '2005-08-01')

        克里斯”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-25
          • 2011-04-06
          • 1970-01-01
          • 2022-12-02
          • 1970-01-01
          • 1970-01-01
          • 2011-10-07
          相关资源
          最近更新 更多