source

Azure CosmosDB에서 LIKE 쿼리를 작성하는 방법

ittop 2023. 4. 22. 10:30
반응형

Azure CosmosDB에서 LIKE 쿼리를 작성하는 방법

다음 쿼리를 사용하여 Cosmos DB에서 데이터를 가져오고 싶습니다.

SELECT * FROM c WHERE c.pi like '09%001'

(이것은 MySQL에서 사용할 수 있는 SQL 쿼리입니다.)

여기서,pi문자열 값입니다.이 값은 다음과 같습니다.09001001또는09025001.

를 사용할 수 있는 방법이 있습니까?LIKE명령어를 사용할 수 있습니까?

cosmos DB가 사용하는 것은 알고 있습니다.CONTAINS단, 스트링의 선두 또는 말미와 특정하게 일치시키는 경우에는 사용할 수 없습니다.

갱신:

이제 LIKE 키워드를 사용하여 Azure Cosmos DB SQL(코어) API에서 텍스트 검색을 수행할 수 있습니다!

예:

SELECT *
FROM c
WHERE c.description LIKE "%cereal%"

오래된 답변:

이는 두 가지 방법으로 달성할 수 있습니다.

(i) 현재 LIKE에 상당하는, , 및 빌트인 기능을 지원하고 있다.

Cosmosdb의 LIKE 키워드는 Contains 입니다.

SELECT * FROM c WHERE CONTAINS(c.pi, '09')

그래서 당신의 경우 패턴과 일치하고 싶다면09%001, 다음을 사용해야 합니다.

SELECT * FROM c WHERE STARTSWITH(c.pi, '09') AND ENDSWITH(c.pi, '001')

(ii) 404에서 설명한 바와 같이 regex를 지원하는 SQL API 사용자 정의 함수를 사용합니다.

function executeRegex(str, pattern) {
    let regex=RegExp(pattern);
    return regex.test(str);
}

SELECT udf.EXECUTE_REGEX("foobar", ".*bar")

또 다른 방법은 사용자 정의 함수를 직접 만드는 것입니다.예를 들어 regex 체크는 다음과 같습니다.

function matchRegex(str, pattern) {
    let regex=RegExp(pattern);
    return regex.test(str);
}

이름으로 작성되었습니다.MATCH_REGEX그 후 다음과 같이 사용할 수 있습니다.

SELECT udf.MATCH_REGEX("09001001", "^09.*001$")

주의: 예를 들어, 인덱스 최적화는 모두 중지됩니다.STARTSWITH그랬을 거야훨씬 더 복잡한 패턴을 만들 수 있습니다.따라서 인덱스를 사용하여 검색을 좁힐 수 있는 추가 필터를 사용하는 것이 유리할 수 있다.StartsWith(c.property1, '09')위의 예에 덧붙여WHERE절을 클릭합니다.

갱신:

코스모스는 이제 같은 일을 할 수 있는 것을 가지고 있다.MongoApi 문서에서는 특정 규칙에 준거하면 인덱스를 사용하여 쿼리를 최적화할 수 있다고 기술되어 있습니다만, (현시점에서는) SqlApi에 해당되지 않는 것 같습니다.

언급URL : https://stackoverflow.com/questions/50577461/how-to-write-a-like-query-in-azure-cosmosdb

반응형