Записать функцию с помощью pl / perlu и использовать этот модуль https://metacpan.org/pod/HTML::Entities
Конечно, вам необходимо установить perl и pl / perl.
1) Прежде всего создайте процедурный язык pl / perlu:
CREATE EXTENSION plperlu;
2) Затем создайте такую функцию:
CREATE FUNCTION decode_html_entities(text) RETURNS TEXT AS $$
use HTML::Entities;
return decode_entities($_[0]);
$$ LANGUAGE plperlu;
3) Затем вы можете использовать его следующим образом:
select decode_html_entities('aaabbb&.... asasdasdasd …');
decode_html_entities
---------------------------
aaabbb&.... asasdasdasd …
(1 row)
Вы делаете свое LEFT
объединение в объединение INNER
, включив критерии в предложение WHERE
. Попробуйте это:
SELECT calendar.datefield, COUNT(calendar.datefield)
FROM calendar
LEFT JOIN final_registration
ON DATE_FORMAT(calendar.datefield, '%Y-%m-%d') = DATE_FORMAT
(final_registration.booking_date, '%Y-%m-%d')
AND final_registration.event_id = '101'
WHERE DATE_FORMAT(calendar.datefield, '%Y-%m-%d') <= DATE_FORMAT( CURDATE(), '%Y-%m-%d' )
AND DATE_FORMAT(calendar.datefield, '%Y-%m') = DATE_FORMAT( CURDATE(), '%Y-%m' )
GROUP BY DATE_FORMAT(calendar.datefield, '%Y-%m-%d')
Необходимо перенести некоторые ограничения в предложении WHERE
в предложение ON
:
SELECT
c.datefield,
COUNT(f.booking_date) AS cnt
FROM calendar c
LEFT JOIN final_registration f
ON c.datefield = DATE(f.booking_date) AND
f.event_id = '101'
WHERE
c.datefield BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') AND CURDATE()
GROUP BY
c.datefield;
[1113 ]
Обратите внимание, что вы хотите сосчитать поле из таблицы final_registration
, которая появляется справа от левого соединения.
Задержка в моем ответе была из-за очистки вашего запроса, чтобы удалить все ненужные вызовы на DATE_FORMAT
. Вы должны иметь возможность иметь дело непосредственно с datefield
. Что касается предложения WHERE
, то, похоже, вам просто нужны даты, которые находятся в текущем месяце, но не позднее текущего дня месяца.