7.시간 함수

Edit

7.1ago()ago()

현재 시간 기준으로 입력된 시간 단위값 만큼의 이전 시간을 반환합니다.

문법

ago("NUM{y|mon|w|d|h|m|s}")
NUM{y|mon|w|d|h|m|s}

s(초), m(분), h(시), d(일), w(주), mon(월), y(연) 단위로 지정할 수 있습니다.

사용 예

2019-04-26 14:31:21 기준 예시입니다.

json "{}" | eval adjusted_time=ago("3d") => 2019-04-23 14:31:21

json "{}" | eval adjusted_time=ago("5m") => 2019-04-26 14:26:21

json "{}" | eval adjusted_time=ago("13h") => 2019-04-26 01:31:21

json "{}" | eval adjusted_time=ago("1y") => 2018-04-26 14:31:21

7.2dateadd()dateadd()

특정한 시각을 기준으로 주어진 시간과 단위만큼 시각을 계산합니다.

문법

dateadd(DATE, "{year|mon|day|hour|min|sec|msec}", INT)
DATE

시간 타입을 반환하는 표현식을 입력합니다.

"{year|mon|day|hour|min|sec|msec}"

INT 값을 계산할 시간 단위를 큰따옴표로 감싸서 지정합니다. 각 시간 유형 지시자의 의미는 아래 를 참조하세요.

INT

시간 단위에 더하거나 뺄 시간을 정수로 지정합니다.

로그프레소는 시간 표현식에 엄격한 유효성 검사를 적용하지 않습니다. 예를 들어 DATE 매개변수에 2020년 13월 34일과 같은 값을 받으면 13월은 한해가 넘어가는 2021년 1월로, 34일은 1월 31일에서 3일을 더한 날짜가 되어 2021년 2월 3일로 계산합니다.
표 7-1시간 유형 지시자

지시자

의미

year

mon

day

hour

min

sec

msec

밀리초

사용 예

json "{}" 
| eval time=dateadd(
  date("2013-09-28 11:47:00", "yyyy-MM-dd HH:mm:ss"), "year", 1
)
  => Sun Sep 28 11:47:00 KST 2014

json "{}" 
| eval time=dateadd(
  date(date("2013-09-28 11:47:00", "yyyy-MM-dd HH:mm:ss"), "mon", -1
)
  => Wed Aug 28 11:47:00 KST 2013

json "{}" 
| eval time=dateadd(
  date("2013-09-28 11:47:00", "yyyy-MM-dd HH:mm:ss"), "day", -3
)
  => Wed Sep 25 11:47:00 KST 2013

json "{}" 
| eval time=dateadd(
  date("2013-09-28 11:47:00", "yyyy-MM-dd HH:mm:ss"), "hour", 2
)
  => Sat Sep 28 13:47:00 KST 2013

json "{}" | eval time=dateadd(date(null, "sec", 10) => null

json "{}" | eval time=dateadd("invalid", "sec", 10) => null

7.3datediff()datediff()

주어진 시작 시각과 마지막 시각 사이의 기간을 지정한 시간 단위로 계산합니다.

문법

datediff(START_DATE, END_DATE, "{year|mon|day|hour|min|sec|msec}")
START_DATE

시작 시각을 반환하는 표현식을 입력합니다. 다른 타입 값을 받으면 null을 반환합니다.

END_DATE

마지막 시각을 반환하는 표현식을 입력합니다. 다른 타입 값을 받으면 null을 반환합니다.

"{year|mon|day|hour|min|sec|msec}"

START_DATEEND_DATE의 기간을 계산할 시간 단위를 큰 따옴표로 감싸서 지정합니다. 각 시간 유형 지시자의 의미는 시간 유형 지시자 표를 참조하세요.

로그프레소는 시간 표현식에 엄격한 유효성 검사를 적용하지 않습니다. 예를 들어 DATE 매개변수에 2020년 13월 34일과 같은 값을 받으면 13월은 한해가 넘어가는 2021년 1월로, 34일은 1월 31일에서 3일을 더한 날짜가 되어 2021년 2월 3일로 계산합니다.

사용 예

2014년 9월 29일에서 2013년 9월 29일의 차이를 계산

# 연 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"),
           date("2014-09-29", "yyyy-MM-dd"), "year") => 1

# 월 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"),
           date("2014-09-29", "yyyy-MM-dd"), "mon") => 12

# 일 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"),
           date("2014-09-29", "yyyy-MM-dd"), "day") => 365

# 시간 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"),
           date("2014-09-29", "yyyy-MM-dd"), "hour") => 8760

# 분 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"), 
           date("2014-09-29", "yyyy-MM-dd"), "min") => 525600

# 초 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"), 
           date("2014-09-29", "yyyy-MM-dd"), "sec") => 31536000

# 밀리초 단위
| datediff(date("2013-09-29", "yyyy-MM-dd"), 
           date("2014-09-29", "yyyy-MM-dd"), "msec") => 31536000000

잘못된 입력의 경우

datediff(null, date("2014-09-29", "yyyy-MM-dd"), "sec") => null

datediff(date("2013-09-29", "yyyy-MM-dd"), null, "min") => null

datediff("invalid", date("2014-09-29", "yyyy-MM-dd"), "min") => null

7.4datepart()datepart()

특정 시각에서 지정한 시간 단위(세기, 연, 월, 일, 요일, 등)에 해당하는 정수값을 추출합니다.

문법

datepart(DATE, DATEPART)
DATE

시간 타입을 반환하는 표현식을 입력합니다. 다른 타입 값을 받으면 null을 반환합니다.

DATEPART

상수 문자열만 사용할 수 있습니다. 유형 지시자의 목록은 다음 표를 참조하세요.

표 7-2유형 지시자

유형 지시자

타입

설명

예시 값

century

int

세기

21

day

int

날짜 (1~31)

12

decade

int

연도를 10으로 나눈 몫

201

dow

int

한 주 내에서의 날 수.

일요일 (0), 토요일 (6)

1

doy

int

한 해 내에서의 날 수

163

epoch

long

1970년 1월 1일부터 날짜까지 경과한 초

1497269156

hour

int

24시간 기준 시간 (0-23)

21

isodow

int

ISO 8601 기준 한 주 내에서의 날 수. 월요일 (1), 일요일 (7)

1

isoyear

int

ISO 8601 기준 한 해의 첫 월요일을 새해 첫 날로 인식한 년도

2017

microseconds

int

초를 포함한 마이크로초

56371000

millenium

int

밀레니엄 (천 년 단위)

3

milliseconds

int

초를 포함한 밀리초

56371

min, minute

int

분 (0-59)

5

mon, month

int

월 (1-12)

6

msec

int

초를 포함하지 않은 밀리초

377

quarter

int

분기 (1-4)

2

sec, seconds

int

초 (0-59)

56

timezone

int

UTC 기준 시간대 (초)

32400

timezone_hour

int

UTC 기준 시간대 (시)

9

timezone_minute

int

UTC 기준 시간대 (분)

0

week

int

ISO 8601 기준 한 해의 첫 월요일을 새해 첫 날로 인식한 주의 수

24

year

int

년도

2017

로그프레소는 시간 표현식에 엄격한 유효성 검사를 적용하지 않습니다. 예를 들어 DATE 매개변수에 2020년 13월 34일과 같은 값을 받으면 13월은 한해가 넘어가는 2021년 1월로, 34일은 1월 31일에서 3일을 더한 날짜가 되어 2021년 2월 3일로 계산합니다.

사용 예

json "{}" 
| eval time=
  datepart(
    date("6월 1 2020 12:34:56",
    "MMM dd yyyy HH:mm:ss", "ko"),
    "year"
)
  => 2020

json "{}" 
| eval time=
  datepart(
    date("6월 1 2020 12:34:56",
    "MMM dd yyyy HH:mm:ss", "ko"),
    "mon"
)
  => 6

json "{}" 
| eval time=datepart(
  date(
    "6월 1 2020 12:34:56", "MMM dd yyyy HH:mm:ss", "ko"),
    "epoch"
)
  => 1590982496

7.5daterange()daterange()

시작 날짜 표현식의 값으로부터 끝 날짜 표현식에 이르기 전까지 시간 단위만큼 건너뛰면서 날짜 값을 생성하여 리스트로 반환합니다. 반환하는 리스트에 끝 날짜는 포함하지 않습니다.

문법

daterange(START_DATE, END_DATE[, INTERVAL{y|mon|w|d|h|m|s}])
START_DATE

시작 날짜를 반환하는 표현식을 입력합니다. 다른 타입 값을 받으면 null을 반환합니다.

END_DATE

끝 날짜를 반환하는 표현식을 입력합니다. 다른 타입 값을 받으면 null을 반환합니다.

INTERVAL{y|mon|w|d|h|m|s}

시간 단위를 지정합니다. s(초), m(분), h(시), d(일), w(주), mon(월), y(연) 단위로 지정할 수 있습니다. 단위를 지정하지 않으면 1d를 사용합니다.

시스템 과부하를 방지하기 위해 daterange() 함수의 결과가 10만건을 초과하면 예외를 발생시켜 쿼리를 실패시킵니다.
로그프레소는 시간 표현식에 엄격한 유효성 검사를 적용하지 않습니다. 예를 들어 DATE 매개변수에 2020년 13월 34일과 같은 값을 받으면 13월은 한해가 넘어가는 2021년 1월로, 34일은 1월 31일에서 3일을 더한 날짜가 되어 2021년 2월 3일로 계산합니다.

사용 예

json "{}" 
| eval mark_days=
  daterange(
    date("20150901", "yyyyMMdd"),
    date("20150908", "yyyyMMdd")
  )
  => ["2015-09-01 00:00:00+0900","2015-09-02 00:00:00+0900","2015-09-03 00:00:00+0900","2015-09-04 00:00:00+0900","2015-09-05 00:00:00+0900","2015-09-06 00:00:00+0900","2015-09-07 00:00:00+0900"]

json "{}" 
| eval mark_days=
  daterange(
    date("20150901", "yyyyMMdd"),
    date("20150902", "yyyyMMdd"),
    "4h"
  )
  => ["2015-09-01 00:00:00+0900","2015-09-01 04:00:00+0900","2015-09-01 08:00:00+0900","2015-09-01 12:00:00+0900","2015-09-01 16:00:00+0900","2015-09-01 20:00:00+0900"]

json "{}" | eval mark_days=daterange("20150901", "20150908") => null

7.6datetrunc()datetrunc()

지정된 시간날짜 표현식을 지정된 시간 단위를 기준으로 절사하여 반환합니다.

문법

datetrunc(DATE, DATEPART{y|mon|w|d|h|m|s})
DATE

시간 타입을 반환하는 표현식을 입력합니다. 다른 타입 값을 받으면 null을 반환합니다.

DATEPART

시간 단위를 s(초), m(분), h(시), d(일), w(주), mon(월), y(연) 단위로 지정합니다.

로그프레소는 시간 표현식에 엄격한 유효성 검사를 적용하지 않습니다. 예를 들어 DATE 매개변수에 2020년 13월 34일과 같은 값을 받으면 13월은 한해가 넘어가는 2021년 1월로, 34일은 1월 31일에서 3일을 더한 날짜가 되어 2021년 2월 3일로 계산합니다.

사용 예

json "{}" 
| eval date=datetrunc(
  date("2014-07-14 11:13:23", "yyyy-MM-dd HH:mm:ss"),"1m"
)
  => 2014-07-14 11:13:00+0900

json "{}" 
| eval date=datetrunc(
  date("2014-07-14 11:13:23", "yyyy-MM-dd HH:mm:ss"),"5m"
)
  => 2014-07-14 11:10:00+0900

json "{}" 
| eval date=datetrunc(
  date("2014-07-14 11:13:23", "yyyy-MM-dd HH:mm:ss"),"1mon"
)
  => 2014-07-01 00:00:00+0900

7.7epoch()epoch()

1970년 1월 1일 이후 경과된 초 또는 밀리초를 입력받아 date 타입으로 변환합니다. 매개변수 값을 초 단위로 해석했을 때 9999년 1월 1일보다 크다면 밀리초로 해석합니다.

문법

epoch(NUM_EXPR)
NUM_EXPR

초 또는 밀리초 단위의 자연수를 반환하는 표현식을 입력합니다.

사용 예

json "{}" 
| eval time=epoch(1435196373492)
  => 2015-06-25 10:39:33+0900

7.8now()now()

함수가 호출되는 시점의 현재 시스템 시각을 반환합니다.

문법

now()

사용 예

json "{}" | eval time=now() => Sat Sep 28 23:58:41 KST 2013
Count of comments [0]