2014-09-21 157 views
0

在我的数据库中,“monthnumber”(varchar)列表示月份。 (1 = 1月,12 = 12月) 现在我需要回显月份的名称而不是数字。使用sql将月份编号转换为月份名称

我已经找到了一些例子,似乎使用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),(8 2013),...

当我尝试打开example.com/2014/8,它给我的 “0结果”,而不是 “2014年8月”,而我的旧代码(每月以数字显示)工作原理:

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

回答

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; 

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

+0

感谢您的回答!我用monthname(),它工作正常。还有一个问题:该代码是否也支持其他语言?假设我想用法语或德语显示月份的名称?或者我需要使用'case'语句吗? – Stan 2014-09-21 18:20:56

+1

@Stan。 。 。使用'case'语句。它应该以数据库的语言返回值,并且您可能没有太多的控制权。 – 2014-09-21 18:35:10

0

在MySQL中只使用下面的语句来数转换为一个月(工作示例)

SELECT MONTHNAME(STR_TO_DATE(id,'%m')) as nameofmonth FROM `user` 
相关问题