개발할때마다 가장 귀찮았던 것 중 하나는 천단위마다 콤마를 찍어주는 것이었다.


처음엔 문자열로 변환하고 글자 개수를 세고 3개를 기준으로 앞뒤를 잘라서 분리하고


그사이에 콤마를 집어넣는 아주아주 귀찮은 방법을 사용했다가


정규식을 사용하여 아주아주 간편하게 천단위마다 콤마를 찍어줄수 있다는걸 알게 되었다.


로직은 굉장히 간단하다.


1
2
3
4
function numbeComma(number) {
    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
 
cs


이게 끝이다.


그동안의 천단위 콤마찍는 귀찮음에서 한번에 해방되는 느낌이다.


예전에 인터넷 돌아다니다 발견했던건데


이거 만든 사람 상줘야 한다.


정규식이라는 개념을 만들어낸 사람도 참 대단하다. 스크립트에서도 그렇고 SQL에서도 그렇고


요즘 정규식이라는걸 참 유용히 잘 사용하고 있다.

Mysql과 MariaDB에서 like와 in을 동시에 사용한 것과 동일한 결과를 출력하는 방법



다른 DBMS는 모르겠지만 mysql에서는 like와 in을 함께 사용 할 수가 없다. 물론 마리아DB도 마찬가지로 사용을 할 수 없다. 


 그러나 개발을 하다보면 like와 in을 동시에 사용할 수 있으면 좋겠다는 생각을 하게 되는데


그에 대한 해결책이다.


방법을 몰라 애멀게 구글에서 like in만 주구장창 검색을 하다가 겨우 찾아낸 방법이다


그리고 이렇게나 간단한 방법이 있는데도 내가 몰라서 개고생 한걸 생각하면 역시 머리가 나쁘면


손발이 고생한다는 말을 되뇌이게 된다.


매우 간단한 방법이다.



1
2
3
4
5
6
7
    SELECT  
             SEARCH_TEXT
        FROM
            search_tbl
        WHERE
               SEARCH_TEXT REGEXP  '헤이|모두들|안녕|내가|누군지|아니'
    
cs




위와 같이 조건을 주게 되면 REGEXP라는 정규식을 사용하면 


like 와 in을 동시에 사용한것과 같이 데이터 베이스의 search_tbl이라는 테이블 안에 있는  SEARCH_TEXT라는 컬럼 로우에


헤이, 모두들, 안녕, 내가, 누군지, 아니   이 6개 단어중에 하나라도 포함이 된 로우는


전부 출력을 해주게 된다.


지저분하게 검색조건에 like를 몇개씩 늘이지 않아도 된다.


저걸 like만으로 사용하게 된다면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        SELECT  
             SEARCH_TEXT
        FROM
            search_tbl
        WHERE
            SEARCH_TEXT like '%헤이%'
        OR
            SEARCH_TEXT like '%모두들%'
        OR
            SEARCH_TEXT like '%안녕%'
        OR
            SEARCH_TEXT like '%내가%'
        OR
            SEARCH_TEXT like '%누군지%'
        OR
            SEARCH_TEXT like '%아니%'
    
cs


이런 장황한 쿼리가 되어 버린다.



REGEXP를 사용하는 정규식에 대해선 아직 잘 모르지만 급하게 like와 in을 동시에 사용 하는 방법과


비슷한 결과를 원한다면 몰라도 원하는 값만 출력해준다면 가져다 쓰면 유용할 듯 하다.


여기에 조금더 응용을 하게 되면 REGEXP 다음에 나오는 정규식을 서브쿼리를 이용해 만들 수도 있다


예를 들어 아래와 같은 쿼리를 구현할 수가 있다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        SELECT  
             SEARCH_TEXT
        FROM
            search_tbl
        WHERE
               SEARCH_TEXT REGEXP (
                                        select
                                            REPLACE(GROUP_CONCAT(TAG_NAME),',','|') AS NAME
                                        from
                                            (
                                                SELECT
                                                    DISTINCT TAGLIST.TAG_NAME,
                                                    TAGLIST.ROOT_TAG
                                                FROM
                                                    ITEM_LIST LIST
                                                JOIN
                                                    ITEM_LIST TARGET
                                                ON
                                                    TARGET.ROOT_TAG = LIST.ROOT_TAG
                                                WHERE
                                                    TARGET.TAG_NAME like '조건1'
                                                OR
                                                    TARGET.TAG_NAME like '조건2'
                                                 
                                            ) selectTagList
                                        )
cs



문자열을 바꿔주는 REPLACE와 값을 이어주는 GRUOP_CONCAT 함수를 사용하며


서브쿼리로 정규식의 모양새를 만들어주고 그 결과로 조건을 만드는 방법이다.


REPLACE와 CONCAT함수는 sql 쿼리 작성시에 유용하게 자주 사용되니 알아두자


제 포스팅이 도움이 되었나요? 

그렇다면 공감하기 한번 눌러주세요 블로거에게 큰 힘이 됩니다


+ Recent posts