MySQL将地址转换为逗号分隔的字符串
是否有任何方法可以缩短/更容易地读取以下SQL以连接字符串MySQL将地址转换为逗号分隔的字符串,mysql,Mysql,是否有任何方法可以缩短/更容易地读取以下SQL以连接字符串 SELECT CONCAT( IF(location_address1 != '', CONCAT(location_address1, ", "), "" ), IF(location_address2 != '', CONCAT(location_address2, ", "), "" ), IF(location_t
SELECT
CONCAT(
IF(location_address1 != '',
CONCAT(location_address1, ", "),
""
),
IF(location_address2 != '',
CONCAT(location_address2, ", "),
""
),
IF(location_town != '',
CONCAT(location_town, ", "),
""
),
IF(location_region != '',
CONCAT(location_region, ", "),
""
),
IF(location_postcode != '',
CONCAT(location_postcode, ", "),
""
),
c.country_name
)
FROM
countries c
WHERE
c.country_id = locations.country_id LIMIT 1
不跳过空字符串。但是,它会跳过分隔符参数之后的任何空值
如果expr1=expr2为真,则返回NULL,否则返回expr1
因此,您的查询可能是:
SELECT
CONCAT_WS(', ',
NULLIF(location_address1, ''),
NULLIF(location_address2, ''),
NULLIF(location_town, ''),
NULLIF(location_region, ''),
NULLIF(location_postcode, ''),
NULLIF(country_name, '')
) AS address
FROM
countries c
WHERE
c.country_id = locations.country_id LIMIT 1
不跳过空字符串。但是,它会跳过分隔符参数之后的任何空值
如果expr1=expr2为真,则返回NULL,否则返回expr1
因此,您的查询可能是:
SELECT
CONCAT_WS(', ',
NULLIF(location_address1, ''),
NULLIF(location_address2, ''),
NULLIF(location_town, ''),
NULLIF(location_region, ''),
NULLIF(location_postcode, ''),
NULLIF(country_name, '')
) AS address
FROM
countries c
WHERE
c.country_id = locations.country_id LIMIT 1
您可以将MySQL中的函数用作:
SELECT CONCAT_WS(',',IF(location_address1 = '', NULL, location_address1),
IF(location_address2 = '', NULL, location_address2),
IF(location_town = '', NULL, location_town),
IF(location_region = '', NULL, location_region),
IF(location_postcode = '', NULL, location_postcode),
c.country_name) AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
甚至@CyberDem0n建议的简单方法:
SELECT CONCAT_WS(',',NULLIF(location_address1,''),
NULLIF(location_address2,''),
NULLIF(location_town,''),
NULLIF(location_region,''),
NULLIF(location_postcode,''),
c.country_name) AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
但是,如果您可以存储空值而不是空值,这将是更好的方法。您可以将MySQL中的函数用作:
SELECT CONCAT_WS(',',IF(location_address1 = '', NULL, location_address1),
IF(location_address2 = '', NULL, location_address2),
IF(location_town = '', NULL, location_town),
IF(location_region = '', NULL, location_region),
IF(location_postcode = '', NULL, location_postcode),
c.country_name) AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
甚至@CyberDem0n建议的简单方法:
SELECT CONCAT_WS(',',NULLIF(location_address1,''),
NULLIF(location_address2,''),
NULLIF(location_town,''),
NULLIF(location_region,''),
NULLIF(location_postcode,''),
c.country_name) AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
但是,如果您可以存储空值而不是空值,这将是更好的方法
我没有检查语法,但我的想法是,与其检查每个语法是否为null或空,不如始终使用连接,然后将所有、替换为、
我没有检查语法,但我的想法是,与其检查每个语法是否为null或空,不如按照@Xdazz的要求,始终使用连接,然后将所有、替换为、。
此修剪版本:
SELECT
CONCAT_WS(', ',
NULLIF(Trim(location_address1), ''),
NULLIF(Trim(location_address2), ''),
NULLIF(Trim(location_town), ''),
NULLIF(Trim(location_region), ''),
NULLIF(Trim(location_postcode), ''),
NULLIF(Trim(country_name), '')
) AS address
FROM
countries c
WHERE
c.country_id = locations.country_id LIMIT 1
根据@Xdazz
此修剪版本:
SELECT
CONCAT_WS(', ',
NULLIF(Trim(location_address1), ''),
NULLIF(Trim(location_address2), ''),
NULLIF(Trim(location_town), ''),
NULLIF(Trim(location_region), ''),
NULLIF(Trim(location_postcode), ''),
NULLIF(Trim(country_name), '')
) AS address
FROM
countries c
WHERE
c.country_id = locations.country_id LIMIT 1
如果位置\地址1=,NULL,位置\地址1可替换为NULL位置\地址1,如果位置\地址1=,NULL,位置\地址1可替换为NULL位置\地址1,