복붙노트

[SQL] PostgreSQL의 문자열 내에서 문자열의 발생 수를 계산

SQL

PostgreSQL의 문자열 내에서 문자열의 발생 수를 계산

어떻게 PostgreSQL의 문자열 내에서 문자열의 발생 수를 계산 할 수 있습니까?

예:

나는 테이블이

CREATE TABLE test."user"
(
  uid integer NOT NULL,
  name text,
  result integer,
  CONSTRAINT pkey PRIMARY KEY (uid)
)

결과는 열 이름은 문자열의 많은 발생을 포함 O를 어떻게 열을 포함하도록 내가 쿼리를 작성합니다. 한 행에 이름 안녕하세요 세계 경우 문자열 안녕하세요 세계에서 두 O 있기 때문에 예를 들어, 열 결과는이 포함되어야합니다.

즉, 내가 입력으로 걸릴 쿼리를 작성하려고 해요 :

그 결과 열을 업데이트 :

나는 함수 regexp_matches 및 전체 (g = 글로벌) 문자열은 문자열의 모든 발생)의 존재를 스캔 할 필요가 있음을 나타냅니다의 g 옵션을 알고있다.

예:

SELECT * FROM regexp_matches('hello world', 'o', 'g');

보고

{o}
{o}

SELECT COUNT(*)  FROM regexp_matches('hello world', 'o', 'g');

보고

2

그러나 나는 열 이름에 포함 된 O를가 문자열의 얼마나 많은 항목을 포함 할 것이라고 방식으로 결과 열을 업데이트 할 업데이트 쿼리를 작성하는 방법을 볼 수 없습니다.

해결법

  1. ==============================

    1.일반적인 솔루션은이 논리를 기반으로 : 빈 문자열로 검색 문자열을 교체하고 검색 문자열의 길이에 의해 이전 및 새 길이의 차이를 분할

    일반적인 솔루션은이 논리를 기반으로 : 빈 문자열로 검색 문자열을 교체하고 검색 문자열의 길이에 의해 이전 및 새 길이의 차이를 분할

    (CHAR_LENGTH(name) - CHAR_LENGTH(REPLACE(name, 'substring', ''))) 
    / CHAR_LENGTH('substring')
    

    그 후:

    UPDATE test."user"
    SET result = 
        (CHAR_LENGTH(name) - CHAR_LENGTH(REPLACE(name, 'o', ''))) 
        / CHAR_LENGTH('o');
    
  2. ==============================

    2.배열이 변환을 수행 문자열의 Postgres'y 방법 및 어레이의 길이를 계산 (다음 1 감산)

    배열이 변환을 수행 문자열의 Postgres'y 방법 및 어레이의 길이를 계산 (다음 1 감산)

    select array_length(string_to_array(name, 'o'), 1) - 1
    

    참고이 아니라 긴 문자열로 작동합니다.

    그 후:

    update test."user"
        set result = array_length(string_to_array(name, 'o'), 1) - 1;
    
  3. ==============================

    3.다른 방법 :

    다른 방법 :

    UPDATE test."user" SET result = length(regexp_replace(name, '[^o]', '', 'g'));
    
  4. ==============================

    4.반환, 문자의 개수

    반환, 문자의 개수

     SELECT (LENGTH('1.1.1.1') - LENGTH(REPLACE('1.1.1.1','.',''))) AS count
    --RETURN COUNT OF CHARACTER '.'
    
  5. ==============================

    5.

    Occcurence_Count = LENGTH(REPLACE(string_to_search,string_to_find,'~'))-LENGTH(REPLACE(string_to_search,string_to_find,''))
    

    이 솔루션은 특히 더 제수와 함께, 내가 본 많은보다 약간 청소기입니다. 당신은 선택 내에서 기능이나 사용이 점을 설정할 수 있습니다. 어떤 변수가 필요하지 않습니다. 나는 대체 문자로 물결표를 사용하지만 데이터 세트에없는 모든 문자가 작동합니다.

  6. from https://stackoverflow.com/questions/36376410/counting-the-number-of-occurrences-of-a-substring-within-a-string-in-postgresql by cc-by-sa and MIT license