5

いくつかのバリエーションを試しましたが、ドキュメントを読んだところ、このパターンは機能するはず'' || val1 || val1です...それでも、結果は空の列です...

thedb=# \d buildings_propertyvalue;
                              Table "public.buildings_propertyvalue"
  Column   |          Type          |                              Modifiers                               
-----------+------------------------+----------------------------------------------------------------------
 id        | integer                | not null default nextval('buildings_propertyvalue_id_seq'::regclass)
 prop_id   | integer                | not null
 place_id  | integer                | not null
 float_val | double precision       | 
 int_val   | integer                | 
 char_val  | character varying(255) | 
 text_val  | text                   | 

thedb=# select * from buildings_propertyvalue limit 10;
 id  | prop_id | place_id | float_val | int_val | char_val | text_val 
-----+---------+----------+-----------+---------+----------+----------
 798 |       3 |      170 |           |     831 |          | 
   2 |      46 |      180 |           |       0 |          | 
 733 |       2 |      180 |        40 |         |          | 
 737 |      10 |      180 |           |       0 |          | 
 740 |       5 |      345 |       100 |         |          | 
 742 |      10 |      345 |           |       0 |          | 
  11 |       2 |      170 |        50 |         |          | 
 744 |      11 |      345 |         0 |         |          | 
 746 |      14 |      345 |           |         | 52       | 
 749 |      46 |      348 |           |       0 |          | 
(10 rows)

thedb=# select prop_id, place_id, '' || float_val || int_val || char_val || text_val as val from buildings_propertyvalue limit 10;
 prop_id | place_id | val 
---------+----------+-----
       3 |      170 | 
      46 |      180 | 
       2 |      180 | 
      10 |      180 | 
       5 |      345 | 
      10 |      345 | 
       2 |      170 | 
      11 |      345 | 
      14 |      345 | 
      46 |      348 | 
(10 rows)
4

2 に答える 2

11

NULL空でない文字列と a を連結すると、NULL

あなたの*_val列はnull可能であるため、おそらく何が起こっているのでしょう。

これを試して:

'' || COALESCE(float_val::TEXT, '') || COALESCE(int_val::TEXT, '') || COALESCE(char_val, '') || COALESCE(text_val, '')

または、null 以外の値を 1 つしか持てない場合は、次のようにします。

COALESCE(float_val::TEXT, int_val::TEXT, char_val, text_val, '')

PostgreSQLinは、他のエンジンとは異なり、 にTEXT比べて欠点がないVARCHARことに注意してください。TEXTVARCHARデータを分離しても意味がありません。

于 2012-04-24T17:37:13.870 に答える
1

NULL値を他の値に連結すると、NULLが生成されます。連結されている列の一部はNULL可能であるように見えるため、NULLの場合は、COALESCE関数をラップして、空の文字列またはその他のプレースホルダー値を強制する必要があります。

于 2012-04-24T17:41:37.570 に答える