Извлечение действительных номеров телефонов США через SQLMySql

Форум по Mysql
Ответить
Anonymous
 Извлечение действительных номеров телефонов США через SQL

Сообщение Anonymous »

У меня есть таблица базы данных с 5 столбцами: телефоны1, телефоны2, телефоны3, телефоны4, телефоны < /p>
Первые четыре столбца (телефоны1, телефоны2, телефоны3, телефоны4). Не всегда в хорошем формате. Итак, я хочу извлечь допустимые 10-значные номера телефонов (на основе США) из первых четырех столбцов и сохранить их в последнем столбце (телефоны), разделенные запятыми. < /P>
Вот некоторые примерные данные Из таблицы на первых четырех столбцах и ожидаемом выводе в пятом столбце: < /p>



телефоны1 < /th>
телефоны2
phones3
phones4 телефоны < /th>
< /tr>
< /thead>


222 < /td>
4455 < /td>

< td style = "text-align: left;"> 1 (333) 145
1 (333) 222-1100 ext111 "
3332221100 < /td>
< /tr>

" 1 (555) 444-3322 "< /td>
null < /td>
Direct: 5002004460 < /td>
8884002010 < /td>
55544443322,5002004460 8884002010 < /td>
< /tr>

$ 5 $ -444-3322 < /td>
< /td>
10020044 < /td>
+1555, 333,8822 < /td>
5553338822 < /td>
< /tr>

... < /td>
222-333-3000 x444-08 < /td>
(333) 777-0330 e < /td>
888-333-9955
2223333000 3337770330 8883339955

< /tbody>
< /table> < /div>
Мой скрипт работает нормально для приведенных выше данных. Но когда в одном или нескольких первых четырех столбцах есть несколько действительных номеров телефонов, разделенных с помощью запятой или вертикальной линии, которые следует за следующим, это не работает по мере необходимости. Он извлекает только первый 10-значный номер телефона в записи, но не другой. < /P>
(555) 333-4422, 1900-800-4422
(555) 444-2022|(600)9002020|444333-2211
1(999) 222-2244", "1(888) 333-1100", "1(900) 200-5050
< /code>
Ниже мой скрипт до сих пор, любые идеи, как отредактировать его для учета записей с несколькими действительными номерами телефонов? < /p>
// DB Info
$db_host = "localhost";
$db_name = "db_name";
$db_user = "db_user";
$db_pass = "db_pass";

// DB Connection
class DB { public static $d; }
DB::$d = new mysqli($db_host, $db_user, $db_pass, $db_name);
if (DB::$d->connect_error) exit("Connection failed, please try again.");

// Table and Columns
$table = "sample_testx";
$columns = array("office_phone", "phone_number", "a_phone_number", "office");
$result = "good_phones";

// Filter
$columns = implode(", ", array_map(fn($col) => "
NULLIF(
REGEXP_REPLACE(
REGEXP_SUBSTR(
REGEXP_REPLACE(`$col`, '[^0-9]', ''), -- Remove non-numeric chars
'1?([0-9]{10})' -- Get first 10 digits
),
'^1', '' -- Remove leading 1
),
'' -- Convert empty values to NULL
)
", $columns));

// Save
$r = DB::$d->query("
UPDATE `$table`
SET `$result` = NULLIF(CONCAT_WS(',', $columns), '') -- Save NULL if no valid numbers
");


Подробнее здесь: https://stackoverflow.com/questions/794 ... rs-via-sql
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»