質問する
0

base フィールドに空白がある場合の文字の連結

質問日 2016-11-04 22:05:47 +0200

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

baseのクエリでフィールドの文字列を連結させたいと思っています。

下記のように文字列を連結しています。 concat(”フィールド1”,”フィールド2”,・・・ しかしフィールドに空白があると、連結結果が空白になってしまいます。

http://oooug.jp/faq/index.php?faq%2F6...

上記のサイトを見ると、+を使って連結すると、フィールドに空白がある場合に連結結果が空白になるが、 CONCAT(CONCAT( "フィールド1", "フィールド2" ), "フィールド3" ) のようにすると回避できるというようなことが書いてありました。

しかし、その方法でもフィールドに空白があると、結果が空白になってしまいます。

空白があっても、連結結果が空白にならない方法はあるのでしょうか?

edit retag flag offensive close merge delete

1 Answer

0

回答日 2016-11-05 11:18:28 +0200

himajin100000 のGravatar画像

updated 2016-11-05 11:27:23 +0200

○COALESCEを使ってください。

○「空白」よりも「null値である」と言ったほうが明確か。てっきりU+0020とか空文字列かと思いそうになったorz

★SQL-92
●(Second Informal Review Draft) ISO/IEC 9075:1992, Database Language SQL- July 30, 1992
http://www.contrib.andrew.cmu.edu/~sh...

2) COALESCE (V1, V2) is equivalent to the following <case <="" p="">

CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

3) COALESCE (V1, V2, . . . ,n ), for n >= 3, is equivalent to the following <case specification="">:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,n ) END

○||はあるが、CONCATはそもそもない! Firebirdにもない。
○character string literalはシングルクオートで括るようだ。

★HSQLDB
●Chapter 10. Built In Functions
http://hsqldb.org/doc/guide/builtinfu...

COALESCE

COALESCE( <value expr="" 1="">, <value expr="" 2=""> [, ...] )

Returns <value expr="" 1=""> if it is not null, otherwise returns <value expr="" 2=""> if not null and so on. The type of both arguments must be comparable. (Foundation)

●同上
http://hsqldb.org/doc/guide/builtinfu...

CONCAT

CONCAT ( <char value="" expr="" 1="">, <char value="" expr="" 2=""> [, ...] )

CONCAT ( <binary value="" expr="" 1="">, <binary value="" expr="" 2=""> [, ...] )

The arguments are character strings or binary strings. Returns a string formed by concatenation of the arguments. Minimum number of arguments is 2. Equivalent to the SQL concatenation expression <value expr="" 1=""> || <value expr="" 2=""> [ || ...] .

Handling of null values in the CONCAT function depends on the database property sql.concat_nulls ( SET DATABASE SQL SYNTAX CONCAT NULLS { TRUE || FALSE } ). By default, any null value will cause the function to return null. If the property is set false, then NULL values are replaced with empty strings. (いつ指定するのか確信が持てない。これ自体はテーブルとしての結果を返さないという趣旨のエラーが出た)

○オマケ(当方環境ではGUIでうまくいかない。Javaから呼ばないと駄目?) (JDBC)

CONCAT_WS

CONCAT_WS ( <char value="" separator="">, <char value="" expr="" 1="">, <char value="" expr="" 2=""> [, ...] )

The arguments are character strings. Returns a string formed by concatenation of the arguments from the second argument, using the separator from the first argument. Minimum number of arguments is 3. Equivalent to the SQL concatenation expression <value expr="" 1=""> || <separator> || <value expr="" 2=""> [ || ...] . The function ignores null values and returns an empty string if all values are null. It returns null only if the separator is null.

This function is similar to a MySQL function of the same name.

★Firebird
CONCATという関数自体ありません。使えません。演算子を使え、ということですね。
http://firebirdsql.org/refdocs/langre...
なのだが、
http://firebirdsql.org/refdocs/langre...
演算子の引数がNULLだった場合の記述がないorz
辛うじて見つけたのが以下。
http://www.firebirdfaq.org/faq21/

●COALESCE() は当然ある。
http://www.firebirdsql.org/file/docum...

Description: The COALESCE function takes two or more arguments and returns the value of the first non-NULL argument. If all the arguments evaluate to NULL, the result is NULL.

○オマケ
http://www.firebirdsql.org/file/docum...
Dynamic SQL (DSQL)
Procedural SQL (PSQL)
Embedded SQL (ESQL)
Interactive SQL (ISQL)

P.S. 画像に必要な3ポイントってどこで獲得できるのかなあ…折角撮ったんだけどなあ…

edit flag offensive delete link もっと

Comments

あるんですね! ありがとうございます!やってみます!

hRmtnNv9WS3WHgw のGravatar画像hRmtnNv9WS3WHgw ( 2016-11-06 22:20:41 +0200 )edit
ログイン/サインアップして回答する

質問ツール

1 follower

Stats

Asked: 2016-11-04 22:05:47 +0200

Seen: 553 times

Last updated: Nov 05 '16