mysql查询从表中获取四分之一个月

时间:2014-04-08 13:40:32

标签: mysql phpmyadmin

Table name: activity
Field name: ProcessYM

我有如下的mysql数据。

ProcessYM
==========
201312
201311
201310
201309
201308
201307
201306
201305
201304
201303
201302
201301
201212
201211
201210
201209
201208
201207
201206

我想获取如下结果。我的意思是,mysql查询获取一年中的每个季度,如201312,201309,201306,201303,201212,201209 ..等等。

Actual Output I expect
=======================
ProcessYM
201312
201309
201306
201303
201212
201209
201206

我已经尝试过以下查询,但它不会产生预期的结果。

SELECT distinct `ActProcessYM` from `activity` where `ActProcessYM`%3=0 order by ActProcessYM desc

Output of above query
=====================
201312
201309
201306
201303
201210
201207

非常感谢你的聪明回复。

5 个答案:

答案 0 :(得分:1)

您只需要模拟月份部分。您的查询隐式将您的ProcessYM转换为INT。

例如:

SELECT DISTINCT ProcessYM 
  FROM activity 
 WHERE RIGHT(ProcessYM,2)%3=0 
 ORDER BY ProcessYM DESC

fiddle

答案 1 :(得分:0)

你应该从字段值中检索最后两位数字并按照你的方式进行逻辑。

SELECT distinct `ActProcessYM` from `activity` where substring(ActProcessYM,5,2)%3=0 order by ActProcessYM desc

答案 2 :(得分:0)

这是处理此日期处理的一种不那么快速和肮脏的方式。我相信你正在寻找像这样的MySQL公式:

 yyyymm = TRUNC_QUARTER(yyyymm)

也就是说,您正在寻找一种功能,可将任何yyyymm月份符号转换为表示该季度结束月份的符号。

让我们从一个表达式开始,将任何特定的DATETIME表达式转换为季度开头的DATE。

DATE(CONCAT(YEAR(value),'-', 1 + 3*(QUARTER(value)-1),'-01'))

这需要一个时间戳(例如' 2011-04-20 11:15:01')并将其转换为季度开始日期。 (例如' 2011-04-01')

在此日期表单中包含内容非常有用,因为您可以将它们用于日期算术。例如,您可以像这样获得该季度的最后一天。

DATE(CONCAT(YEAR(value),'-', 1 + 3*(QUARTER(value)-1),'-01')) 
     + INTERVAL 1 QUARTER - INTERVAL 1 DAY

这是对所有这些内容的撰写:http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

我发现在处理时间序列数据时尝试坚持使用date数据类型会很有帮助。

答案 3 :(得分:0)

在执行模3(%3)之前,您需要将月值分开。先做一个模数100就可以了:

(ProcessYM % 100) % 3) = 0

mod(mod(ProcessYM,100),3) = 0

答案 4 :(得分:0)

试试这个,

 SELECT distinct `ProcessYM` from `activity` where SUBSTRING(`ProcessYM`,5,2)%3=0 order by ProcessYM desc