【问题标题】:Extract all month in one coulmn from Date从日期中提取一列中的所有月份
【发布时间】:2014-06-01 14:05:13
【问题描述】:

我的表 Kot_items 中有一个日期字段。如果数据库中不存在月份,如何提取所有月份名称?

select  distinct month(Tran_date) as mon
from Kot_items

数据库中的数据

MON  monthname
    1          jan
    2          feb
    3          mar

异常结果

MON  monthname
1       jan
2       feb
3       mar
4       Apr
5       mar
6       june
7       july
8       Aug
9       Sep
10      Oct
11      nov
12      Dec

更新帖子::

形成这个查询::

选择年份(tran_date) 作为年份编号, QUARTER(tran_date) 作为季数, 月(tran_date)作为星期一 来自 KOT_Items

yearnumber  quarternumber   mon 
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   
2014    2           4   

喜欢的结果除外

yearnumber  quarternumber   mon 
2014    1           1   
2014    1           2   
2014    1           3   
2014    2           3   
2014    2           4   
2014    2           5   
2014    3           6   
2014    3           7   
2014    3           8   
2014    4                9  
2014    4           10  
2014    4           11  
2014    4           12

【问题讨论】:

  • 为什么不创建一个包含所有月份的表?
  • 作为 mysql 新手,我不知道该怎么办??
  • 以上更新帖子的任何想法作为新手我无法找到任何想法

标签: mysql


【解决方案1】:

一种方法是创建一个包含所有月份的表。然后,您可以在此表和您的事务表之间使用外连接。

CREATE TABLE months (mon INT, monthname CHAR(3)) AS
SELECT 1, 'Jan'
UNION
SELECT 2, 'Feb'
UNION
SELECT 3, 'Mar'
...
SELECT 12, 'Dec'

如果你不能这样做,你可以使用 UNION 子查询:

SELECT * FROM (
    SELECT 1 AS mon, 'Jan' AS monthname
    UNION
    SELECT 2, 'Feb'
    UNION
    SELECT 3, 'Mar'
    ...
    SELECT 12, 'Dec') AS months
LEFT JOIN Kot_items AS i ON months.mon = MONTH(i.tran_date)

然后可以将其与您的事务表连接。

对于年份、季度和月份,请执行以下操作:

SELECT YEAR(NOW()) AS yearnumber, 1 as quarternumber, 1 as mon
UNION ALL
SELECT YEAR(NOW()), 1, 2
UNION ALL
SELECT YEAR(NOW()), 1, 3
UNION ALL
SELECT YEAR(NOW()), 2, 4
UNION ALL
SELECT YEAR(NOW()), 2, 5
UNION ALL
SELECT YEAR(NOW()), 2, 6
UNION ALL
SELECT YEAR(NOW()), 3, 7
UNION ALL
SELECT YEAR(NOW()), 3, 8
UNION ALL
SELECT YEAR(NOW()), 3, 9
UNION ALL
SELECT YEAR(NOW()), 4, 10
UNION ALL
SELECT YEAR(NOW()), 4, 11
UNION ALL
SELECT YEAR(NOW()), 4, 12

如果您使用我上面显示的months 表,您可以简单地将quarternumber 列添加到表中。要制作当前年份的表格,您可以使用如下查询:

SELECT YEAR(NOW()), quarternumber, mon
FROM months

【讨论】:

  • 但是如果我按照你的想法使用,我得到的数据类型是 Decimal 来自 mon,而月份名称的字符串不能在 Date 数据类型中
  • 不确定我是否理解这个问题(请写完整的单词,这不是 IM 或 twitter)。日期不适合这样做,因为它们有特定的年份和日期,您需要任何年份的月份。
  • 我遇到了另一个问题,现在我得到了整个月,但是像上面一样,我可以从提交的日期中提取甚至年份、月份、季度表中没有的日期。
  • select month(date_sub(NOW(), interval 12 month)) union select month(date_sub(NOW(), interval 11 month)) and so on
  • 是否可以给出完整的代码?请向你学习有用
【解决方案2】:

试试SELECT MONTHNAME(datefield) as monthname FROM tablename

【讨论】:

  • 这有什么帮助?他的问题是有些月份不在表格中。
【解决方案3】:
SELECT m.mon, m.month
FROM (
SELECT 1 as mon, 'Jan' as month
UNION    
SELECT 2 as mon, 'Feb' as month
UNION    
SELECT 1 as mon, 'Mar' as month
UNION    
SELECT 1 as mon, 'Apr' as month
UNION    
SELECT 1 as mon, 'May' as month
UNION    
SELECT 1 as mon, 'Jun' as month
UNION    
SELECT 1 as mon, 'Jul' as month
UNION    
SELECT 1 as mon, 'Aug' as month
UNION    
SELECT 1 as mon, 'Sep' as month
UNION    
SELECT 1 as mon, 'Oct' as month
UNION    
SELECT 1 as mon, 'Nov' as month
UNION    
SELECT 1 as mon, 'Dec' as month  
) AS m
LEFT JOIN Kot_items k ON m.month = k.month(Tran_date)

【讨论】:

    【解决方案4】:

    你可以使用:

    SELECT MONTH(Trans_date) as mon, MONTHNAME(Tran_date) as monthname FROM Kot_items ;
    

    From here

    所有月份

    SELECT 1 as mon, 'January' AS
        MONTH
        UNION SELECT 2 as mon 'February' AS
        MONTH
        UNION SELECT 3 as mon 'March' AS
        MONTH
        UNION SELECT 4 as mon 'April' AS
        MONTH
        UNION SELECT 5 as mon 'May' AS
        MONTH
        UNION SELECT 6 as mon 'June' AS
        MONTH
        UNION SELECT 7 as mon 'July' AS
        MONTH
        UNION SELECT 8 as mon 'August' AS
        MONTH
        UNION SELECT 9 as mon 'September' AS
        MONTH
        UNION SELECT 10 as mon 'October' AS
        MONTH
        UNION SELECT 11 as mon 'November' AS
        MONTH
        UNION SELECT 12 as mon 'December' AS
        MONTH
        ) AS m
    

    最简单的方法是创建一个单独的表,并加入您当前拥有的表 (Kot_items) From here

    【讨论】:

    • 如果其中没有包含 12 月日期的行,这有什么帮助?
    • k 很好,但我在数据库中只有 3 个月的日期,但如果月份不存在,那么我也想显示整个月份,而不仅仅是数据库中的当前月份数据
    • 您的交易没有设置日期(也没有月份),但您仍想显示月份名称?你能解释一下吗?
    • 他想显示一年中所有月份的结果,甚至是表中没有交易的月份。
    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多