在MySQL,我可以选择列只存在的东西吗?
例如,我有以下查询:
select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
我试图只选择电话以813开始的行,电话2有一些东西在里面。
在MySQL,我可以选择列只存在的东西吗?
例如,我有以下查询:
select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
我试图只选择电话以813开始的行,电话2有一些东西在里面。
当前回答
我们可以使用CASE将空白值设置为一些字符或字符串。 我使用NA作为默认字符串。
SELECT phone,
CASE WHEN phone2 = '' THEN 'NA' END AS phone2 ELSE ISNULL(phone2,0)
FROM jewishyellow.users WHERE phone LIKE '813%'
其他回答
另一种替代方法是专门查看列值的CHAR_LENGTH。(不要与长度混淆)
使用字符长度大于0的条件,可以避免在列值可能为假时出现误报,例如在整数列的值为0或NULL的情况下。跨不同数据类型的行为更加一致。
这将导致至少1个字符长或非空的任何值。
比如https://www.db-fiddle.com/f/iQvEhY1SH6wfruAvnmWdj5/1
SELECT phone, phone2
FROM users
WHERE phone LIKE '813%'
AND CHAR_LENGTH(phone2) > 0
表数据
users
phone (varchar 12) | phone2 (int 10)
"813-123-4567" | NULL
"813-123-4567" | 1
"813-123-4567" | 0
users2
phone (varchar 12) | phone2 (varchar 12)
"813-123-4567" | NULL
"813-123-4567" | "1"
"813-123-4567" | "0"
"813-123-4567" | ""
CHAR_LENGTH(phone2) > 0
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
选择
phone2 <> "结果(不同)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
结果(不同)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
COALESCE(phone2, ") <> "结果(相同) 注意:结果不同于phone2 IS NOT NULL AND phone2 <> ",这不是预期的
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 IS NOT NULL AND phone2 <> "结果(不同)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
检查NULL和空字符串值:
select phone
, phone2
from users
where phone like '813%'
and trim(coalesce(phone2, '')) <>''
注意:我认为COALESCE()是SQL标准(-ish),而ISNULL()不是。
Use:
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 IS NOT NULL
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone like '813%' and (phone2 <> "");
可能需要一些调整,这取决于您的默认值是什么。如果你允许Null填充,那么你可以做“Not Null”代替,这显然更好。
select phone, phone2 from jewishyellow.users
where phone like '813%' and phone2 is not null