Удалить пробел из вывода to_char()

Я генерирую представление из этого:

create or replace view datetoday as
select to_char(dt, 'yyyy-mm-dd') as date, to_char(dt, 'Day') as weekday from 
(select ('2013-03-01'::date + i) dt from generate_series(0,'2013-03-03'::date - 2013-03-01'::date) 
as t(i)) as t;

Это дает мне информацию о дне недели как text тип. Тогда я использую:

select date::date, weekday::varchar from datetoday;

Теперь стол похож

2013-3-1 Friday
2013-3-2 Saturday

Если я хочу выбрать запись:

select * from datetoday where weekday='Friday'

изменить это с text в character varying,

Кажется, что длина фиксирована не в соответствии с длиной каждого слова.
Например, "пятница" должна иметь длину 6, а среда - 9.
Как я могу изменить это, пусть длина будет реальной длиной слова?

Потому что позже я сравню эту таблицу weekday столбец к другой таблице weekday колонка. подобно

where a.weekday=b.weekday

Другой день недели от пользователя jsp, поэтому длина меняется.
Теперь длина фиксирована, сравнение не удается.

1 ответ

Решение

Шаблон 'Day' заполнен пробелом вправо, длина всех дней составляет 9 символов. Использовать FM Модификатор шаблона шаблона для удаления любых отступов:

SELECT d::date AS day
     , to_char(d, 'yyyy-mm-dd') AS day_text
     , to_char(d, 'FMDay')      AS weekday
FROM generate_series('2013-03-01'::date
                   , '2013-03-07'::date
                   , interval '1 day') d;

Также демонстрирует generate_series() для отметок времени. На один уровень запросов меньше.
Если вам нужен фактический date в представлении, сделать его реальным типом date, не переходите в text и назад.
И не используйте имя базового типа date как имя столбца. С помощью day вместо.
И я бы просто использовал text для текста. Нет смысла конвертировать в varchar,

Другие вопросы по тегам