mysql - 从日期中提取一列中的所有月份

标签 mysql

我的表 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/

相关文章:

MySQL对行进行分组来查找时间差

mysql - 使用 peewee 连接 mysql 以及访问表的一些问题

mysql - 如何检索 MySQL 表中哪些列已更新

php - 使用 PDO 的多个数据库

python - mysql,如何备份数据到另一台机器

c# - 删除按钮 SQL 数据库 Windows 窗体应用程序

php - 如何让我的 PDO 连接更有效率?

mysql - 从命令提示符 mysql 工具中导出 MySQL 数据库。没有 mysqldump

php - 有人曾经使用过带 SESSION 变量的 PayPal Website Payments Standard 吗?

mysql - 从cygwin问题连接到mysql