MYSQL: 如何将字符串转换为月份(数字)

3
我有月份的简称:JAN,FEB,MAR等等。
我想把它们转换为相应的数字值:1,2,3等等。
同时,我想能够在数字月值和"短"月名(JAN,FEB,MAR)以及其长版本(January,February,March等等)之间来回切换。
注意:正如@dipu-raj指出的那样,这不是一个重复的问题,因为我要求与MySQL MONTHNAME() from numbers相反,而且答案也是不同的,因为需要不同的函数。

https://dev59.com/0mw05IYBdhLWcg3wykzn - Hanky Panky
1
这个问题不是重复的,因为它询问如何将月份名称转换为月份数字,而被标记的问题则回答了如何将月份数字转换为月份名称。 - Dipu Raj
4个回答

13

要将缩写转换为完整的月份名称,请使用:

mysql> select monthname(str_to_date('Mar','%b'));
+------------------------------------+
| monthname(str_to_date('Mar','%b')) |
+------------------------------------+
| March                              |
+------------------------------------+

将缩写转换为数字使用:

mysql> select month(str_to_date('Mar','%b'));
+--------------------------------+
| month(str_to_date('Mar','%b')) |
+--------------------------------+
|                              3 |
+--------------------------------+

+1 - 不错:我的解决方案让天数为零,但我没有考虑到年份也可能为零;这个方法更加简洁。 - Ed Gibbs
另一种方法是:SELECT FIELD(month, 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),其中 month 是 1-12 的数字,将会返回对应的月份名称。 - kmoser

2

1
JAN转换为月份数字;在下面看到FEB的地方替换成你的列/值:
date_format(str_to_date(concat(2012, 'FEB'), '%Y%b'), '%m')
                                     ^^^^^

1 转换为其短月份名称;在指定的列/值处进行替换:
 date_format(str_to_date(concat('2012-', 1), '%Y-%m'), '%b')
                                         ^

使用%M替代上述的最后一个值%b,可以得到完整的月份名称。

-1

试试这个:

    $date = 'Jan';
    echo 'Month number is '.date('n', strtotime($date)).'</br>';
    echo 'and its '.date('F', strtotime($date));

使用PHP手册-日期/时间函数获取更多格式选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接