5

我由此生成一个视图:

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'

将其从 更改textcharacter varying

好像长度是固定的,不是按照每个字长来的。
例如“星期五”的长度应该是 6,星期三的长度应该是 9。
我怎样才能改变这个,让长度成为单词的实际长度?

因为稍后我会将这个表的weekday列与另一个表的weekday列进行比较。喜欢

where a.weekday=b.weekday

另一个工作日来自 jsp 的用户,因此长度不同。
现在长度是固定的,比较失败。

4

1 回答 1

13

该模式'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.

于 2014-03-07T05:52:54.990 回答