POSTGRESQL加入生成的字符串属性

问题描述 投票:0回答:1

我得到了一个名为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

我期望的是每天获得工作日的值,就像我对星期三所做的那样。为什么只有星期三才能正确加入?我在做什么错?

谢谢

sql postgresql join
1个回答
1
投票

我找到了解决方案。

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
© www.soinside.com 2019 - 2024. All rights reserved.