2 つのテーブルがあるとします。1 つのフィールドには長いテキスト値 ( などfoobarbaz
) が含まれ、もう 1 つのフィールドには短い値 (foobar
およびsomeothertext
) が含まれます。次の条件で 2 つのテーブルから値を取得したいと思います: テキストは等しくてはならず、長い文字列の先頭は短い文字列と一致する必要があります。Postgresでこれを行う(きちんとした)方法はありますか? 前もって感謝します。
質問する
9547 次
2 に答える
3
どうですか:
SELECT <whatever>
FROM <your tables>
WHERE one_field <> the_other_field
AND position(the_other_field in one_field) = 1;
文字列関数と演算子を参照してください。
于 2012-06-14T11:11:19.420 に答える
2
他の答えが言うように、「位置」を使用することができます...しかし、私は正規表現を使用します。
postgres=> create database test;
CREATE DATABASE
postgres=> \c test
You are now connected to database "test".
test=> create table long (long varchar);
CREATE TABLE
test=> create table short (short varchar);
CREATE TABLE
test=> insert into long values ('foobarbaz');
INSERT 0 1
test=> insert into long values ('qfoobarbaz');
INSERT 0 1
test=> insert into long values ('now this is a long text');
INSERT 0 1
test=> insert into short values ('foobar');
INSERT 0 1
test=> insert into short values ('someothertext');
INSERT 0 1
test=> select long.long from long join short on long.long <> short.short and long.long ~ ('^' || short.short);
long
-----------
foobarbaz
(1 row)
注意、正規表現が含まれている場合は、shortをエスケープする必要があります。
(編集後)-これは、LIKE(テストされていない)を使用した場合の外観です。
select long.long
from long
join short on
long.long <> short.short and
long.long LIKE (short.short || '%');
于 2012-06-14T11:13:58.507 に答える