Mysql
 sql >> база данни >  >> RDS >> Mysql

връщане на числа от средата на низ с неправилен формат

Това е нетривиална задача в MySQL, няма вградена функция за връщане на съвпадение на регулярен израз. Но тъй като търсите точно 13 цифри, можете да направите нещо подобно (очевидно да разширите това до броя на позициите, които трябва да проверите...

-- setup test
CREATE TABLE t (foo VARCHAR(30));
INSERT INTO t VALUES 
('1938420985390asdfih')
,('1234812934810dflkasd')
,('asdfasldkjfaasdfjasd')
,('asd;flkjaklsdf')
,('adfsdf1234073927357sdapjfas')
,('1/4sdikhsd')


SELECT CASE
       WHEN SUBSTR(foo,1,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,1,13)
       WHEN SUBSTR(foo,2,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,2,13)
       WHEN SUBSTR(foo,3,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,3,13)
       WHEN SUBSTR(foo,4,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,4,13)
       WHEN SUBSTR(foo,5,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,5,13)
       WHEN SUBSTR(foo,6,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,6,13)
       WHEN SUBSTR(foo,7,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,7,13)
       WHEN SUBSTR(foo,8,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,8,13)
       WHEN SUBSTR(foo,9,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,9,13)
       END AS digits
  FROM t

-------------------
1938420985390
1234812934810
(NULL)
(NULL)
1234073927357
(NULL) 

Не, не е красиво. Но трябва да можете да разширите това, за да "сканирате" ефективно низ с разумна дължина.

ЗАБЕЛЕЖКА:Регулярният израз проверява дали целият подниз от 13 знака се състои от точно 13 знака, като всеки от знаците е десетична цифра (0 до 9).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Онлайн/офлайн синхронизация на база данни - MySQL/PHP

  2. Какви са съответните предимства/ограничения на Amazon RDS спрямо EC2 с MySQL?

  3. Добавяне на външен ключ от тип char в mysql

  4. Мога ли да параметризирам името на таблицата в подготвено изявление?

  5. [MySQL]:Какво представлява методът за съпоставяне?