Преобразовать номер месяца в название месяца с помощью sql

В моей базе данных столбец «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";

0

Решение

Это ваш запрос:

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

Другие решения

В MySql просто используйте следующую инструкцию для преобразования числа в месяц (рабочий пример)

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector