3

単一の where 条件で複数の列を持つクエリを実装しようとしています。しかし、SQLエラーが発生します。
私の元のクエリはこのようなものです

SELECT id 
FROM usertable 
WHERE (user_addedon BETWEEN '2013-07-02 00:00:01' AND '2013-08-01 23:59:59')
   OR (user_deletedon BETWEEN '2013-07-02 00:00:01' AND '2013-08-01 23:59:59')
   OR (user_modified BETWEEN '2013-07-02 00:00:01' AND '2013-08-01 23:59:59')

私がやろうとしているのは、の繰り返しを避けることですBETWEEN。IN句の別のSO投稿SQL複数列から、このようなクエリクエリを作成しました

SELECT id 
FROM usertable 
WHERE (user_addedon,user_deletedon,user_modifiedon) BETWEEN '2013-07-02 00:00:01' AND '2013-08-01 23:59:59'

しかし、それはエラーを示していますERROR: input of anonymous composite types is not implemented
PostgreSQLに実装できないからなのか、クエリに誤りがあるのでしょうか。
また、これを実装する他の方法があるかどうか知りたいですか?

PostgreSQL 8.4 を使用しています

4

3 に答える 3

1

他の投稿ではIN、複数の列でクエリを実行する方法を示していますが、これは、 などの他の演算子で可能であることを示しているわけではありませんBETWEEN

私の知る限り、あなたが望むものを達成する唯一の方法は、質問の冒頭で示したように、3つのBETWEENステートメントで:(私は知っていますが、それはSQLです

于 2013-08-01T05:17:28.527 に答える
0

betweenのリストがより明確であると思うのと同じように、演習として

select id 
from usertable 
where exists (
    select 1
    from
        (values (user_addedon, user_deletedon, user_modified)) ud(ud)
        cross join
        (values ('2013-07-02'::date, '2013-08-02'::date)) r(ri, re)
    where ud >= ri and ud < re
)
于 2013-08-01T13:05:16.153 に答える