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}$' )
- “select id, name, phone_number”:表示要选择(查询)的列,即 “id”(联系人标识符)、“name”(联系人姓名)和 “phone_number”(联系电话)。
- “from contacts”:指定数据来源是 “contacts” 表。
- “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” 子句的逻辑是:满足上述两个条件组中的任意一个条件的记录都会被选中。