본문 바로가기
학부 전공/DB

PostgreSQL Regular Expressions & comparing Dates and Times

by 장어진 2021. 6. 19.

PostgreSQL Regular Expressions

Similar to SQL 표준으로 1999년에 들어가긴 했지만 잘 안 쓰인다. 대신 POSIX-style이 중요하다. Editor라던지 language라던지 text 도구라던지 대부분이 POSIX을 표준으로 따른다. ~.~* 로 쓰인다.

설명 예시
. 1개의 문자와 일치한다.  Star…
? 바로 앞의 문자가 없거나 한 번 있는 것이다. a?bb, ab를 포함한다.
* 0개 이상의 문자를 포함한다. a*bb, ab, aab, aaab를 포함한다.
+ 1개 이상의 문자를 포함한다 a+bab, aab, aaab를 포함하지만 b는 포함하지 않는다.
{m, n} {m, n} m부터 n까지의 개수만큼만 나와야 한다. a{1,3}bab, aab, aaab를 포함하지만, baaaab는 포함하지 않는다.
{m} 앞서 있는 문자가 m만큼만 나와야 한다. a{3}baaab만 포함한다.
{m,} 앞서 있는 문자가 m이상 나와야 한다. a{2,}baab, aaab, aaaab를 포함한다. ab는 포함되지 않는다.
^ $ String의 시작을 ^, String의 끝을 $로 나타낸다. ^whole line$whole로 시작해서 line으로 줄이 끝나야 한다.
 \ 특수 문자를 식에 문자 자체로 포함한다.  \%
() 여러 식을 하나로 묶을 수 있다. (grouping) abc|adca(b|d)c는 같은 의미이다.
| Or 개념이다. (men|women)
[] [ ] 사이의 문자 중에서만 와야 한다. 또한,
‘-‘ 기호와 함께 쓰면 범위를 지정할 수 있다.
[abc]dad, bd, cd를 뜻한다. [a-z]a부터z까지 중 하나, [0-9]0부터9까지 중의 하나를 의미한다.
[^list] [ ] 사이의 문자는 오면 안 된다는 뜻이다. [^abc] abc 모두 아니어야 한다.
\n 앞서 나온 값이 똑같이 나와야 한다. The (.*) the (.*) and \1 or \2 :  \1에는 첫 번째 괄호의 것이 \2에는 두번째 괄호와 똑같이 와야 한다.  

 

Ex) select * from Movie where title ~ ‘Star .*’;

>> title ~ ‘Star Wars’

>> title ~ ‘^S.*’

>>title ~ ‘.*of.*’

>>title ~ ‘Star ….’

Movie 테이블의 title중에 Star로 시작하는 영화를 뽑는 것이다. .*을 사용했기 때문에 Star로 시작하고 그 뒤에 1개의 문자를 포함하고 있으면 된다. 

^S로 설정하였기 때문에 S로 시작하고 뒤에 .*이기때문에 1개 이상의 문자만 오면 되는 조건이다. 

.*of.*은 앞뒤에 무슨 단어가 오는 지 모르고 중간에 of만 기억날 때 사용할 수 있는 것으로 중간 부분에 of를 포함하면 된다는 조건이다. 

Oracle Regular Expression

식은 POSIX표준을 똑같이 따르고 있어 위의 표를 참고하면 될 것 같다.

Ex) select title from Movie where REGEXP_LIKE(title, ‘^Star.*’);

>> REGEXP_LIKE(title, ‘Star Wars’)

>> REGEXP_LIKE(title, ‘^[ST].*’)

>> REGEXP_LIKE(title, ‘.*-.*’)

 

Comparing Dates and Times

Date: DATE ‘2021-05-08’

Time: TIME ’15:40:00’, TIME ’15:40:00.12345’, TIME ’12:00:00+9:00’

Timestamp: TIMESTAMP ‘2021-05-08 15:40:00’

Ex) DATE ’1999-05-14’ < DATE ‘2021-05-08’ (과거가 미래보다 작은 값으로)

 

Extract : Get a field from date or time value

Syntax: EXTRACT(field FROM expression)

 

1955면 1월 1일 이후에 태어난 배우들을 뽑은 것이다.  더 큰 값이 더 이후의 값이라고 생각하면 편할 것 같다. 

728x90

'학부 전공 > DB' 카테고리의 다른 글

SQL join사용하기  (0) 2021.06.19
SQL NULL Value & Ordering  (0) 2021.06.19
SQL Comparisionb of String & Pattern Match  (0) 2021.06.19
SQL 기본 사용법  (0) 2021.06.19
SQL 역사  (0) 2021.06.19