我的表 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)为 mon 来自 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
异常(exception)结果为喜欢
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
最佳答案
一种方法是创建一个包含所有月份的表。然后,您可以在该表和事务表之间使用外部联接。
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
关于mysql - 从日期中提取一列中的所有月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130805/