使用sql将月份编号转换为月份名称

时间:2014-09-21 17:50:30

标签: php mysql sql date dateadd

在我的数据库中,“monthnumber”列(varchar)表示月份。 (1 = 1月1日,12 = 12月) 现在我需要回显月份的名称而不是数字。

我已经找到了一些示例,似乎使用DateName( )是执行此类操作的正确方法。但即使有这些例子,它也不适合我。显然我错过了一些东西,但我无法弄清楚是什么......

.htaccess文件:

RewriteRule ^example/([^/]+)/([^/]+)$ test?year=$1&monthnumber=$2 [L,QSA]

HTML / PHP的:

<?php
    $year= $_GET['year'];
    $monthnumber= $_GET['monthnumber'];

    $sql = "SELECT DISTINCT DateName( month, DateAdd( month , 'monthnumber' , -1 ) ) AS 'monthname', monthnumber, year FROM `exampletable` WHERE year = :year AND monthnumber = :monthnumber";

    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":year", $year);
    $stmt->bindParam(":monthnumber", $monthnumber);
    $stmt->execute();

    if($result = $stmt->fetch(PDO::FETCH_ASSOC))
    {
    ?>

    <?php echo strtolower($result['monthname']);?> <?php echo $result['year'];?>

    <?php
    }// end if
    else {
    echo '0 results';
    }// end else
    ?>

某些行示例(年月份数)

(2014 8),(2014 7),(2013 8),...

当我尝试打开example.com/2014/8时,它会给我“0结果”而不是“2014年8月”,而我的旧代码(显示为数字的月份)有效:

$sql = "SELECT DISTINCT monthnumber, year FROM `exampletable` WHERE year = :year AND monthnumber = :monthnumber";

2 个答案:

答案 0 :(得分:1)

这是您的查询:

SELECT DISTINCT DateName( month, DateAdd( month , 'monthnumber' , -1 ) ) AS monthname,
       monthnumber, year
FROM `exampletable`
WHERE year = :year AND monthnumber = :monthnumber

它正在使用SQL Server中的函数,所以我怀疑它在MySQL中是否可行。

最好只使用case声明:

select distinct (case when monthnumber = '1' then 'January'
                      when . . .
                      when monthnumber = '12' then 'December'
                 end) as monthname
from exampletable
where year = :year and monthnumber = :monthnumber;

您也可以通过构建日期并使用monthname()

来完成此操作
select distinct monthname(date(concat_ws('-', year, monthnumber, '01'))) as monthname
from exampletable
where year = :year and monthnumber = :monthnumber;

注意:您应该只对日期和字符串常量使用单引号。永远不要在列名称周围使用单引号,这只会导致问题。

答案 1 :(得分:0)

  

在MySql中,只需使用以下语句将数字转换为月份(工作示例)

SELECT MONTHNAME(STR_TO_DATE(id,'%m')) as nameofmonth FROM `user`