select
    id,
    name,
    phone_number
from
    contacts
where
    (
        phone_number not like '%-%'
        and length(phone_number)=10
        and substring(phone_number,1,1)!='0'
    )
    or
    (
        phone_number regexp '^[1-9]\\d{2}-\\d{3}-\\d{4}$'
    )
  1. “select id, name, phone_number”:表示要选择(查询)的列,即 “id”(联系人标识符)、“name”(联系人姓名)和 “phone_number”(联系电话)。
  2. “from contacts”:指定数据来源是 “contacts” 表。
  3. “where” 子句用于筛选符合条件的记录:

第一个条件组:“phone_number not like '%-%'”:表示 “phone_number” 字段的值不包含 “-” 字符。

“and length (phone_number)=10”:并且 “phone_number” 字段的长度为 10 个字符。

“and substring (phone_number,1,1)!='0'”:且 “phone_number” 字段的第一个字符不是 “0”。

第二个条件组:“phone_number regexp '^[1-9]\d{2}-\d{3}-\d{4}:表示字段的值符合正则表达式”,即号码以 1 到 9 开头,接着是两位数字,然后是一个 “-”,再接着是三位数字,又一个 “-”,最后是四位数字。

整个 “where” 子句的逻辑是:满足上述两个条件组中的任意一个条件的记录都会被选中。