在我的数据库中,列"monthnumber"(varchar)表示月份。(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";
这是您的查询:
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;
注意:日期和字符串常量只能使用单引号。永远不要在列名周围使用单引号,这只会导致问题。
在MySql中,只需使用以下语句将数字转换为月份(工作示例)
SELECT MONTHNAME(STR_TO_DATE(id,'%m')) as nameofmonth FROM `user`