select
    *
from
    contacts
where
    left(phone_number,1) != 0
and
    case
        when phone_number like '%-%' 
        then length(substring_index(phone_number,'-',1)) = 3 
             and 
             length(substring_index(phone_number,'-',-1)) = 4
        else length(phone_number) = 10
    end 
order by 
    id

可以尝试使用这种方式来进行判断。

因为题目中要求如果电话号码带有连接符,应该是3位,3位,4位的形式。所以可以这样子做,因为我目前还没接触到大家都在说的正则表达式,所以这个笨办法可以用一下。