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

Изтриване на записи с число, повтарящо се повече от 5

Добре, така че логиката тук може да се обобщи като:

  • Намерете най-дългата поредица от една и съща последователна цифра във всяко дадено число; и
  • Връща true, ако тази най-дълга стойност е> 5 цифри

Нали?

И така, нека го разделим на поредица от последователни цифри:

regress=> SELECT regexp_matches('666666689', '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g');
 regexp_matches 
----------------
 {6666666}
 {8}
 {9}
(3 rows)

след това филтрирайте за най-дългия:

regress=> 

SELECT x[1] 
FROM regexp_matches('6666666898', '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g') x 
ORDER BY length(x[1]) DESC 
LIMIT 1;

    x    
---------
 6666666
(1 row)

... но всъщност не ни интересува това, просто ако някой запис е по-дълъг от 5 цифри, така че:

SELECT x[1] 
FROM regexp_matches('6666666898', '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g') x 
WHERE length(x[1]) > 5;

може да се използва като EXISTS тест, напр.

WITH blah(n) AS (VALUES('999999969'),('000000089'),('666666689'),('15552555'))
SELECT n
FROM blah
WHERE EXISTS (
    SELECT x[1] 
    FROM regexp_matches(n, '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g') x 
    WHERE length(x[1]) > 5
)

което всъщност е доста ефективно и връща правилния резултат (винаги хубаво). Но може да се опрости малко повече с:

WITH blah(n) AS (VALUES('999999969'),('000000089'),('666666689'),('15552555'))
SELECT n
FROM blah
WHERE EXISTS (
    SELECT x[1] 
    FROM regexp_matches(n, '(0{6}|1{6}|2{6}|3{6}|4{6}|5{6}|6{6}|7{6}|8{6}|9{6})', 'g') x;
)

Можете да използвате същия WHERE клауза в DELETE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично отказване на базата данни Moodle PostgreSQL

  2. Вземете броя на записите, засегнати от INSERT или UPDATE в PostgreSQL

  3. Защо нов потребител в PostgreSQL може да се свързва с всички бази данни?

  4. Как мога да обединя записи в два JSON масива?

  5. Изпълнението на множество оператори с Postgresql чрез SQLAlchemy не запазва промените