В моей базе данных столбец «monthnumber» (varchar) указывает месяц. (1 = январь, 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», в то время как мой старый код (месяц отображается как число) работает:
$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`