これがある場合-taddはAddress
テーブルです。
CONCAT(tadd.street_number, ' ',
tadd.street_name,', ',
tadd.apt_number,', ',
tadd.city,', ',
tadd.postal_code,', ',
tadd.country) AS 'Address'
Apt_numberが存在しない場合に除外する方法はありますか?
私は考えていました:
WHERE tadd.apt_number IS NOT NULL
しかし、それはapt_number
の行のみを返します。何かが機能しても、余分なコンマを処理する方法を教えてください。
重複している場合は、コメントにリンクを投稿してください。
NULL
値(空の文字列ではない)をスキップする場合は、CONCAT_WS()
関数:
_CONCAT_WS( ', ', -- Separator
CONCAT_WS(' ', tadd.street_number, tadd.street_name),
tadd.apt_number, tadd.city,
tadd.postal_code, tadd.country
) AS Address
_
ドキュメントから:
CONCAT_WS(separator,str1,str2,...)
CONCAT_WS()
はConcatenate With Separatorの略で、CONCAT()
の特殊な形式です。最初の引数は、残りの引数の区切り文字です。区切り文字は、連結される文字列の間に追加されます。区切り文字は、残りの引数と同様に文字列にすることができます。セパレータがNULL
の場合、結果はNULL
になります。
CONCAT_WS()
は空の文字列をスキップしません。ただし、セパレータ引数の後のNULL
値はスキップされません。
NULL
または COALESCE
でラップして、空の文字列のIFNULL
値を変換します。
SELECT
CONCAT(IFNULL(tadd.street_number,''),
' ',IFNULL(tadd.street_name,''),
', ',IFNULL(tadd.apt_number,''),
', ',IFNULL(tadd.city,''),
', ',IFNULL(tadd.postal_code,''),
', ',IFNULL(tadd.country,'')) AS 'Address'
FROM db.tbl;
SELECT
CONCAT(COALESCE(tadd.street_number,''),
' ',COALESCE(tadd.street_name,''),
', ',COALESCE(tadd.apt_number,''),
', ',COALESCE(tadd.city,''),
', ',COALESCE(tadd.postal_code,''),
', ',COALESCE(tadd.country,'')) AS 'Address'
FROM db.tbl
CONCAT(
tadd.street_number, ' ', tadd.street_name, ', ',
-- concat() will return null if one is null, so ifnull returns empty string in that case
IFNULL(CONCAT(tadd.apt_number, ', '), ''),
tadd.city, ', ', tadd.postal_code, ', ',tadd.country
) AS 'Address'
CONCAT_WS('', -- hack, empty delimiter
tadd.street_number, ' ',
tadd.street_name,', ',
CONCAT(tadd.apt_number,', '), -- hack, this line will become NULL, when apt_number is null, and will be omitted with delimiter
tadd.city,', ',
tadd.postal_code,', ',
tadd.country) AS 'Address'
my sqlはわかりませんが、-[〜#〜] ms [〜#〜] SQL(TQSL)では、ソリューションは次のようになります。
SELECT
tadd.street_number + ' ' +
tadd.street_name + ', ' +
ISNULL(tadd.apt_number + ', ', '') +
tadd.city + ', ' +
tadd.postal_code + ', ' +
tadd.country AS 'Address'
さらに、apt_numberだけでなく、すべてのNULL
フィールドを省略できます(再びmysql)。
SELECT CONCAT_WS(', ',
CONCAT(tadd.street_number, ' ', tadd.street_name),
tadd.apt_number,
tadd.city,
tadd.postal_code,
tadd.country) AS 'Address'