1

数字と場合によってはテキストを含む2つの文字列を比較する必要があります。たとえば、私はこのテーブルを持っています:

id | ラベル1| ラベル2|
1 | 12 / H | 1 |
2 | 4 / A | 41 / D |
3 | 13 / A | 3 / F |
4 | 8 / A | 8 / B |
..

Label 1 <Label2の場合、DirectionがW(with)、それ以外の場合はA(に対して)になるように方向を決定する必要があります。したがって、次のようにデータを表示するビューを作成する必要があります。

id | 方向  
1 | A |   
2 | W |
3 | A |
4 | W |
..

私はpostgres9.2を使用しています。

4

2 に答える 2

2
WITH x AS (
   SELECT id
         ,split_part(label1, '/', 1)::int AS l1_nr
         ,split_part(label1, '/', 2)      AS l1_txt
         ,split_part(label2, '/', 1)::int AS l2_nr
         ,split_part(label2, '/', 2)      AS l2_txt
   FROM t
   )
SELECT id
      ,CASE WHEN (l1_nr, l1_txt) < (l2_nr, l2_txt)
       THEN 'W' ELSE 'A' END AS direction
FROM   x;

2 つの部分を分割し、split_part()アドホックな行タイプでチェックして、どちらのラベルが大きいかを確認します。

両方のラベルが等しい場合、またはどちらかが NULL の場合は定義されていません。

CTEは必須ではありません。読みやすくするためだけです。

-> sqlfiddle

于 2013-01-09T22:44:07.233 に答える
0

次のようなものを試すことができます:

SELECT id, CASE WHEN regexp_replace(label_1,'[^0-9]','','g')::numeric <
                     regexp_replace(label_2,'[^0-9]','','g')::numeric
                THEN 'W'
                ELSE 'A'
           END
FROM table1

regexp_replace文字列から数字以外のすべての文字を削除すると、文字列::numericが に変換されnumericます。

詳細はこちら: regexp_replaceパターン マッチングCASE WHEN

于 2013-01-09T22:43:17.580 に答える