2009-11-18 6 views
16

MySQL 쿼리에서 Regex.Replace 함수 (예 : .NET/C#)와 동일한 동작을 수행하려면 어떻게해야합니까?MySQL/정규 표현식 대체 프로그램에서 단어 수를 계산하는 방법은 무엇입니까?

많은 사람들처럼 필드의 단어 수를 계산하기 때문에 필요합니다. 그러나, 나는 (그 사이트에 여러 번 주어진) 다음과 같은 대답에 만족하지 않다 :

SELECT LENGTH(name) - LENGTH(REPLACE(name, ' ', '') +1 FROM table 

두 단어 사이에 둘 이상의 공간이있을 때 그것이 좋은 결과를 제공하지 않기 때문에.

그런데 Regex.Replace 기능이 재미있을 것 같아서 모든 좋은 아이디어를 환영합니다!

+0

, 왜 필드에 단어를 계산? – Peter

답변

17

MySQL user-defined functions으로 REGEXP_REPLACE을 (를) 사용할 수 있습니다.

단어 계산 : 데이터베이스로 들어오는 데이터를 제어 할 수 있으면 삽입하기 전에 두 공백을 제거 할 수 있습니다. 또한 단어 수에 자주 액세스해야하는 경우 코드에서 한 번 계산하고 데이터베이스에 수를 저장할 수 있습니다.

+0

늦게 받아 죄송합니다 ... – PierrOz

0

대답은 아닙니다. MySQL에서는 같은 동작을 할 수 없습니다.

하지만이 기능 중 일부를 사용하도록 설정 한 UDF로 연결되는 피사체에 대해서는 이전에 question으로 결제하시기 바랍니다.

1

거의 this question의 복제본이지만이 대답은 this blog post의 맞춤 정규 표현식 대체품의 고급 버전을 기반으로 단어를 세는 사용 사례를 다룹니다. 내가 해봤 모든 온라인 워드 카운터 (예를 들어, https://wordcounter.net/)와 같은 -

샘플 텍스트에 대한

Rextester online demo

데모,이 61의 수를 제공합니다.

SQL (간결 제외 기능 코드) : 호기심에서

SELECT txt, 
     -- Count the number of gaps between words 
     CHAR_LENGTH(txt) - 
     CHAR_LENGTH(reg_replace(txt, 
           '[[:space:]]+', -- Look for a chunk of whitespace 
           '^.', -- Replace the first character from the chunk 
           '', -- Replace with nothing (i.e. remove the character) 
           TRUE, -- Greedy matching 
           1, -- Minimum match length 
           0, -- No maximum match length 
           1, -- Minimum sub-match length 
           0 -- No maximum sub-match length 
           )) 
     + 1 -- The word count is 1 more than the number of gaps between words 
     - IF (txt REGEXP '^[[:space:]]', 1, 0) -- Exclude whitespace at the start from count 
     - IF (txt REGEXP '[[:space:]]$', 1, 0) -- Exclude whitespace at the end from count 
     AS `word count` 
FROM tbl; 
관련 문제