group_concat 为 mysql 中的空值插入双引号
group_concat inserting double quote for empty values in mysql
我有一些数据存储在 table 中作为 user_values 列中的逗号分隔字符串,因此根据我的要求,我想获取存储在 user_values 列中的特定用户数据和值为此目的应该用单引号引起来我正在使用下面的查询并且它工作正常,但是如果特定用户在 user_values 列中没有任何值然后下面的查询得到 user_values 插入一个双引号但是它应该为该列获取空值,因此如果特定用户的列为空,如何防止双引号。
table
id user_values
1 1,2
2 3,4,5
3 // empty / no value for this user
4 4,7
mysql查询:
情况 1:如果用户 1 在 user_values 列中有值,则
SELECT id,GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val
FROM user
WHERE id=1;
输出:
情况 2:如果用户没有任何值,则在空列中插入 double
SELECT id, GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val
FROM user
WHERE id=3;
输出:
我怀疑 user_values
的某些值是空字符串(与 null
值不同,group_concat()
忽略)。您可以使用 group_concat()
中的 case
表达式来解决此问题,该表达式将空字符串转换为 null
值,例如:
SELECT
id,
GROUP_CONCAT(CASE
WHEN user_values = '' THEN NULL
ELSE CONCAT("'", REPLACE(user_values,",", "','"), "'")
END) as user_val
FROM user
WHERE id = 3;
我同意 GMB 对问题的诊断。但是,我认为 NULLIF()
提供了一个更简单的解决方案:
SELECT id,
GROUP_CONCAT( NULLIF(CONCAT("'", REPLACE(user_values, ",", "','") , "'"), "''"
) as user_val
FROM user
WHERE id = 3 ;
我有一些数据存储在 table 中作为 user_values 列中的逗号分隔字符串,因此根据我的要求,我想获取存储在 user_values 列中的特定用户数据和值为此目的应该用单引号引起来我正在使用下面的查询并且它工作正常,但是如果特定用户在 user_values 列中没有任何值然后下面的查询得到 user_values 插入一个双引号但是它应该为该列获取空值,因此如果特定用户的列为空,如何防止双引号。
table
id user_values
1 1,2
2 3,4,5
3 // empty / no value for this user
4 4,7
mysql查询:
情况 1:如果用户 1 在 user_values 列中有值,则
SELECT id,GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val
FROM user
WHERE id=1;
输出:
情况 2:如果用户没有任何值,则在空列中插入 double
SELECT id, GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val
FROM user
WHERE id=3;
输出:
我怀疑 user_values
的某些值是空字符串(与 null
值不同,group_concat()
忽略)。您可以使用 group_concat()
中的 case
表达式来解决此问题,该表达式将空字符串转换为 null
值,例如:
SELECT
id,
GROUP_CONCAT(CASE
WHEN user_values = '' THEN NULL
ELSE CONCAT("'", REPLACE(user_values,",", "','"), "'")
END) as user_val
FROM user
WHERE id = 3;
我同意 GMB 对问题的诊断。但是,我认为 NULLIF()
提供了一个更简单的解决方案:
SELECT id,
GROUP_CONCAT( NULLIF(CONCAT("'", REPLACE(user_values, ",", "','") , "'"), "''"
) as user_val
FROM user
WHERE id = 3 ;