Удалить пробел из вывода 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
,