POSTGRESQL Присоединиться к сгенерированному строковому свойству - PullRequest
0 голосов
/ 30 января 2020

Я получил таблицу с именем work_schema_items, которая содержит пару столбцов, и важным для этого вопроса является рабочий день столбца varchar. Содержит следующие значения:

end_time    start_time    weekday
12:00       06:00         Monday
14:30       12:30         Monday
15:00       14:45         Monday
18:00       15:00         Monday
21:00       18:30         Monday
23:00       21:15         Monday
23:59       23:15         Monday
12:00       06:00         Tuesday
14:30       12:30         Tuesday
15:00       14:45         Tuesday
18:00       15:00         Tuesday
21:00       18:30         Tuesday
23:00       21:15         Tuesday
23:59       23:15         Tuesday
12:00       06:00         Wednesday
14:30       12:30         Wednesday
15:00       14:45         Wednesday
18:00       15:00         Wednesday
21:00       18:30         Wednesday
23:00       21:15         Wednesday
23:59       23:15         Wednesday
12:00       06:00         Thursday
14:30       12:30         Thursday
15:00       14:45         Thursday
18:00       15:00         Thursday
21:00       18:30         Thursday
23:00       21:15         Thursday
23:59       23:15         Thursday
12:00       06:00         Friday
14:30       12:30         Friday
15:00       14:45         Friday
18:00       15:00         Friday
21:00       18:30         Friday
23:00       21:15         Friday
23:59       23:15         Friday

Когда я запускаю следующий sql запрос:

select 
    t.date,
    t.weekday,
    work_schema_items.weekday
from (
    select
        dd::date as date,
        to_char(dd, 'Day')::varchar as weekday
    from 
        generate_series('2019-12-08'::timestamp, '2019-12-16'::timestamp, '1 day'::interval) dd
    ) as t
left join work_schema_items on t.weekday = work_schema_items.weekday
order by date

Я получаю такой результат:

2019-12-08  Sunday      NULL
2019-12-09  Monday      NULL
2019-12-10  Tuesday     NULL
2019-12-11  Wednesday   Wednesday
2019-12-11  Wednesday   Wednesday
2019-12-11  Wednesday   Wednesday
2019-12-11  Wednesday   Wednesday
2019-12-11  Wednesday   Wednesday
2019-12-11  Wednesday   Wednesday
2019-12-11  Wednesday   Wednesday
2019-12-12  Thursday    NULL
2019-12-13  Friday      NULL
2019-12-14  Saturday    NULL
2019-12-15  Sunday      NULL
2019-12-16  Monday      NULL

Что я Я ожидаю, чтобы получить значение дня недели для каждого дня, как я делаю со средой. Почему только среда правильно присоединилась? Что я делаю не так?

Спасибо

1 Ответ

1 голос
/ 03 февраля 2020

Я нашел решение.

char - это тип данных фиксированной длины, а среда - самая длинная строка дня недели. Он сохраняет свою ширину, даже если я преобразовал его в varchar, в результате чего я попытался соединить "Monday " в "Monday".

Простая TRIM () решает проблему:

select 
    t.date,
    t.weekday,
    work_schema_items.weekday
from (
    select
        dd::date as date,
        TRIM(to_char(dd, 'Day')::varchar) as weekday
    from 
        generate_series('2019-12-08'::timestamp, '2019-12-16'::timestamp, '1 day'::interval) dd
    ) as t
left join work_schema_items on t.weekday = work_schema_items.weekday
order by date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...