6

2 つのテーブルがあるとします。1 つのフィールドには長いテキスト値 ( などfoobarbaz) が含まれ、もう 1 つのフィールドには短い値 (foobarおよびsomeothertext) が含まれます。次の条件で 2 つのテーブルから値を取得したいと思います: テキストは等しくてはならず、長い文字列の先頭は短い文字列と一致する必要があります。Postgresでこれを行う(きちんとした)方法はありますか? 前もって感謝します。

4

2 に答える 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 に答える