2014-09-21 159 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` 
相關問題