Query에서 Timestamp 함수 사용

시간 기록 및 기간 값에 대해 다양한 작업을 수행할 수 있습니다.

시간 기록에 기간을 추가하고, 두 시간 기록 간의 차이를 찾고, 지정된 단위에 대한 라운드 시간 기록을 찾을 수 있습니다. 사용자정의된 패턴을 사용하여 문자열에서/에서 문자열로 시간 기록을 변환할 수 있습니다. 일부 함수는 시간 기록의 날짜 부분 추출을 지원합니다. 이러한 함수를 사용하여 현재 시간을 표시할 수도 있습니다.

다음 시간 기록 함수가 지원됩니다.

표 1 - 시간 기록 함수

기능 설명
시간 기록 추가 시간 기록 값에 기간을 추가합니다.
시간기록 차이 두 시간 기록 값 사이의 밀리초 수를 반환합니다.
get_duration 지정된 밀리초 수를 기간 문자열로 변환합니다.
타임스탬프_실 시간 기록 값을 지정된 단위로 올림합니다.
timestamp_floor/timestamp_trunc 시간 기록 값을 지정된 단위로 반올림합니다.
타임스탬프 라운드 시간 기록 값을 지정된 단위로 반올림합니다.
타임스탬프_버켓 시간 기록 값을 지정된 원점 값부터 시작하여 지정된 간격의 시작 부분으로 반올림합니다.
형식_시간 기록 지정된 패턴 및 시간대에 따라 시간 기록을 문자열로 변환합니다.
구문 분석_to_timestamp 지정된 패턴의 문자열을 시간 기록 값으로 변환합니다.
월의 마지막 일자 지정된 시간 기록에서 월의 마지막 날을 반환합니다.
시간기록 추출 함수

지정된 시간 기록의 해당 일자 부분을 추출합니다. 다음 함수가 지원됩니다.

  • 연도
  • 시간
  • 두 번째
  • 밀리초
  • 마이크로초
  • 나노초

연도 내의 주 수를 반환합니다. 다음 함수가 지원됩니다.

  • 이소위크

지정된 시간 기록의 해당 인덱스를 반환합니다. 다음 함수가 지원됩니다.

  • 분기
  • day_of_week
  • day_of_month
  • 연도의 day_of_year
현재_시간_밀리 현재 시간을 밀리초 수로 반환합니다.
현재_시간 현재 시간을 시간 기록 값으로 반환합니다.

예제와 함께 따라가려면 질의를 실행할 샘플 데이터를 참조하여 샘플 데이터를 보고 스크립트를 사용하여 테스트를 위해 샘플 데이터를 로드합니다. 스크립트는 예제에 사용된 테이블을 생성하고 데이터를 테이블로 로드합니다.

예제와 함께 따라가려면 쿼리를 실행할 샘플 데이터를 참조하여 샘플 데이터를 확인하고 OCI 콘솔을 사용하여 예제 테이블을 생성하고 JSON 파일을 사용하여 데이터를 로드하는 방법을 알아보십시오.

시간기록 산술 함수

timestamp_add, timestamp_diff 또는 get_duration 함수를 사용하여 시간 기록 및 기간 값에 대해 산술 연산을 수행할 수 있습니다.

예 1 - 항공사 응용 프로그램에서 5분 지연 버퍼는 "정시"로 간주됩니다. 티켓 번호가 1762399766476인 승객의 경우 첫 번째 구간에 예상 도착 시간을 5분 버퍼로 인쇄합니다.

SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag
WHERE ticketNo=1762399766476

설명:항공사 응용 프로그램에서 고객은 소스 및 목적지에 따라 원하는 수의 비행 구간을 가질 수 있습니다. 위의 질의에서 여행의 "첫 번째 구간"에 예상 도착을 인출하는 중입니다. 따라서 flightsLeg 배열의 첫번째 레코드가 인출되고 estimatedArrival 시간이 배열에서 인출되고 "5분" 버퍼가 추가되어 표시됩니다.

출력:

{"ARRIVAL_TIME":"2019-02-03T06:05:00.000000000Z"}

참고:

estimatedArrival 열은 STRING입니다. 열의 STRING 값이 ISO-8601 형식인 경우 SQL 런타임에 의해 자동으로 TIMESTAMP 데이터 유형으로 변환됩니다.

ISO8601은 날짜, 시간 및 기간을 나타내는 국제적으로 허용되는 방법을 설명합니다.

구문: 날짜 및 시간: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]

설명:

예 2 - 티켓 번호가 1762399766476인 승객에 대해 버퍼가 5분인 모든 구간에서 예상 도착 시간을 인쇄합니다.

SELECT $s.ticketno, $value as estimate,
timestamp_add($value, '5 minute') AS add5min
FROM baggageinfo $s,
$s.bagInfo.flightLegs.estimatedArrival as $value
WHERE ticketNo=1762399766476

설명:모든 구간에 estimatedArrival 시간을 표시하려고 합니다. 다리의 수는 각 고객마다 다를 수 있습니다. 따라서 변수 참조가 위 질의에 사용되고 baggageInfo 배열 및 flightLegs 배열이 질의를 실행하기 위해 중첩되지 않습니다.

출력:

{"ticketno":1762399766476,"estimate":"2019-02-03T06:00:00Z",
"add5min":"2019-02-03T06:05:00.000000000Z"}
{"ticketno":1762399766476,"estimate":"2019-02-03T08:22:00Z",
"add5min":"2019-02-03T08:27:00.000000000Z"}

예 3 - 지난 주에 몇 개의 가방이 도착했습니까?

SELECT count(*) AS COUNT_LASTWEEK FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate < current_time()
AND $element.bagArrivalDate > timestamp_add(current_time(), "-7 days")]

설명:지난 주에 항공사에서 처리한 가방 수를 확인할 수 있습니다. 고객은 두 개 이상의 가방을 가질 수 있습니다. 즉, bagInfo 배열은 두 개 이상의 레코드를 가질 수 있습니다. bagArrivalDate의 값은 오늘과 지난 7일 사이여야 합니다. bagInfo 배열의 모든 레코드에 대해 백 도착 시간이 지금과 일주일 전 사이에 있는지 확인합니다. current_time 함수는 시간을 제공합니다. EXISTS 조건은 가방에 지난 주에 도착 일자가 있는지 확인하기 위한 필터로 사용됩니다. count 함수는 이 기간 동안의 총 가방 수를 결정합니다.

출력:

{"COUNT_LASTWEEK":0}

예 4 - 다음 6시간 이내에 도착하는 가방 수를 찾습니다.

SELECT count(*) AS COUNT_NEXT6HOURS FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate > current_time()
AND $element.bagArrivalDate < timestamp_add(current_time(), "6 hours")]

설명:다음 6시간 내에 항공사에서 처리할 가방 수를 확인할 수 있습니다. 고객은 둘 이상의 가방을 가질 수 있습니다. 즉, bagInfo 배열에는 둘 이상의 레코드가 있을 수 있습니다. bagArrivalDate는 현재 시간과 다음 6시간 사이여야 합니다. bagInfo 배열의 모든 레코드에 대해 백 도착 시간이 지금과 6시간 후 사이에 있는지 확인합니다. current_time 함수는 시간을 제공합니다. EXISTS 조건은 가방에 다음 6시간 이내에 도착 날짜가 있는지 여부를 결정하기 위한 필터로 사용됩니다. count 함수는 이 기간 동안의 총 가방 수를 결정합니다.

출력:

{"COUNT_NEXT6HOURS":0}

예 5 - 수하물이 한 다리에 탑승하고 티켓 번호가 1762355527825인 승객의 다음 구간에 도달한 시간 사이의 기간은 얼마입니까?

SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825

설명:항공사 응용 프로그램에서 모든 고객은 소스와 대상 간에 다른 수의 홉/레그를 가질 수 있습니다. 이 질의에서는 모든 비행 구간 사이에 걸린 시간을 결정합니다. 이는 모든 항공편 구간에 대해 bagArrivalDateflightDate의 차이로 결정됩니다. 기간(일, 시간 또는 분)을 확인하려면 timestamp_diff 함수의 결과를 get_duration 함수에 전달합니다.

출력:

{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:00:00Z",
"diff":"3 hours 17 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:23:00Z",
"diff":"2 hours 54 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T08:23:00Z",
"diff":"1 hour 54 minutes"}

기간(밀리초)을 확인하려면 timestamp_diff 함수를 사용합니다.

SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo,
$bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825

출력:

{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:00:00Z","diff":11820000}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:23:00Z","diff":10440000}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T08:23:00Z","diff":6840000}

예 6 - 체크인 시점부터 티켓 번호가 176234463813인 승객의 탑승 시점에 가방을 스캔하는 데 걸리는 시간은 얼마나 됩니까?

SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
get_duration(timestamp_diff(
    $flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
    $flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime
)) AS diff
FROM baggageinfo $s,
$s.bagInfo[].flightLegs[] AS $flightLeg
WHERE ticketNo=176234463813 AND
starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)

설명:수하물 데이터에서 모든 flightLeg에는 작업 배열이 있습니다. 작업 배열에는 세 가지 다른 작업이 있습니다. 배열의 첫 번째 요소에 대한 작업 코드는 체크인/오프로드입니다. 첫 번째 다리의 경우 작업 코드는 체크 인이고 다른 다리의 경우 작업 코드는 홉에서 오프로드입니다. 배열의 두 번째 요소에 대한 작업 코드는 BagTag Scan입니다. 위의 질의에서 백 태그 스캔과 체크인 시간 사이의 작업 시간 차이를 결정합니다. 작업 코드가 체크인 또는 BagScan인 경우에만 contains 함수를 사용하여 작업 시간을 필터링합니다. 첫 번째 비행 구간에만 체크인 및 가방 스캔에 대한 세부 정보가 있으므로 starts_with 함수를 사용하여 소스 코드 fltRouteSrc만 인출하는 데이터를 추가로 필터링합니다. 기간(일, 시간 또는 분)을 확인하려면 timestamp_diff 함수의 결과를 get_duration 함수에 전달합니다.

기간(밀리초)을 확인하려면 timestamp_diff 함수를 사용합니다.

SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
timestamp_diff(
   $flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
   $flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime
) AS diff
FROM baggageinfo $s,
$s.bagInfo[].flightLegs[] AS $flightLeg
WHERE ticketNo=176234463813 AND
starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)

출력:

{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":"- 1 hour 24 minutes"}

예 7 - 티켓 번호가 1762320369957인 고객의 가방이 첫번째 운송 지점에 도달하는 데 얼마나 걸립니까?

SELECT  $bagInfo.flightLegs[1].actions[2].actionTime,
$bagInfo.flightLegs[0].actions[0].actionTime,
get_duration(timestamp_diff($bagInfo.flightLegs[1].actions[2].actionTime,
                            $bagInfo.flightLegs[0].actions[0].actionTime)) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo
WHERE ticketNo=1762320369957

설명:항공사 응용 프로그램에서 모든 고객은 소스와 대상 간에 다른 수의 홉/레그를 가질 수 있습니다. 위 예에서 가방이 첫 번째 이동점에 도달하는 데 걸리는 시간을 결정합니다. 수하물 데이터에서 flightLeg은 배열입니다. 배열의 첫번째 레코드는 첫번째 이동점 세부 정보를 참조합니다. 첫 번째 레코드의 flightDate는 가방이 소스를 떠나는 시간이고 첫 번째 비행 구간 레코드의 estimatedArrival은 첫 번째 이동 지점에 도달하는 시간을 나타냅니다. 둘의 차이는 가방이 첫 번째 이동점에 도달하는 데 걸리는 시간을 제공합니다. 기간(일, 시간 또는 분)을 확인하려면 timestamp_diff 함수의 결과를 get_duration 함수에 전달합니다.

기간(밀리초)을 확인하려면 timestamp_diff 함수를 사용합니다.

SELECT  $bagInfo.flightLegs[0].flightDate,
$bagInfo.flightLegs[0].estimatedArrival,
timestamp_diff($bagInfo.flightLegs[0].estimatedArrival,
$bagInfo.flightLegs[0].flightDate) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo
WHERE ticketNo=1762320369957

출력:

{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:00:00Z","diff":"13 hours"}
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:40:00Z","diff":"13 hours 40 minutes"}

타임스탬프 라운드 함수

timestamp_ceil, timestamp_floor, timestamp_trunc, timestamp_roundtimestamp_bucket 함수를 사용하여 시간 기록 값을 반올림할 수 있습니다.

timestamp_ceil, timestamp_floor, timestamp_trunctimestamp_round 함수의 경우 unit를 두번째 인수로 제공해야 합니다. unit는 입력 시간 기록을 반올림하는 동안 고려할 소수점 이하 자릿수를 지정합니다.

단수 또는 복수 형식으로 지원되는 단위는 YEAR, IYEAR, QUARTER, MONTH, WEEK, IWEEK, DAY, HOUR, MINUTE, SECOND입니다.

timestamp_bucket 함수를 사용하여 지정된 시간 기록 값을 지정된 간격(버킷)의 시작 부분으로 반올림할 수 있습니다. 간격은 타임라인의 지정된 원점에서 시작됩니다.

timestamp_bucket는 단수 또는 복수 형식으로 WEEK, DAY, HOUR, MINUTE, SECOND 간격을 지원합니다.

예 1 - 항공사 수하물 추적 데이터에서 티켓 번호가 1762344493810인 승객에 대한 수하물 도착 날짜 및 수하물 경매 날짜를 인쇄합니다. 수하물 보유 기간으로 90일을 고려합니다.

SELECT $b.bagArrivalDate AS BagArrival,
timestamp_ceil(timestamp_add($b.bagArrivalDate, "90 Days"), 'day') AS BagCollection
FROM BaggageInfo bag, bag.bagInfo AS $b
WHERE ticketNo=1762344493810

설명: 이 질의는 시간 기록 함수를 중첩하는 방법을 보여줍니다. 미청구 백이 보존되는 날짜를 확인하려면 timestamp_add 함수를 사용하여 bagArrivalDate에 90일을 추가합니다. timestamp_ceil 함수는 값을 다음 날의 시작으로 반올림합니다.

출력:

{"BagArrival":"2019-02-01T16:13:00Z","BagCollection":"2019-05-03T00:00:00Z"}

예 2 - 2019년 3월에 출발한 공항 JFK에 탑승한 모든 승객의 이름, 항공편 번호 및 여행 날짜를 인쇄합니다.

SELECT bag.fullName, $f.flightNo, $f.flightDate
FROM BaggageInfo bag, bag.bagInfo[0].flightLegs[0] AS $f
WHERE $f.fltRouteSrc = "JFK" AND timestamp_floor($f.flightDate, 'MONTH') = '2019-03-01'

설명: 단위 값이 MONTH인 timestamp_floor 함수를 사용하여 출장 날짜를 월초로 반올림합니다. 그런 다음 결과 시간 기록 값을 "2019-03-01" 문자열과 비교하여 원하는 승객을 선택합니다. 이 질의는 수송 중인 승객을 고려하지 않습니다.

이 예에서는 날짜를 ISO-8601 형식의 문자열로 제공합니다. 이 문자열은 암시적으로 CAST를 TIMESTAMP 값으로 가져옵니다.

승객이 확인한 여러 가방으로 인해 결과가 중복되지 않도록 하려면 이 질의에서 bagInfo 배열의 첫 번째 요소만 고려합니다.

출력:

{"fullName":"Kendal Biddle","flightNo":"BM127","flightDate":"2019-03-04T06:00:00Z"}
{"fullName":"Dierdre Amador","flightNo":"BM495","flightDate":"2019-03-07T07:00:00Z"}

예 3 - 항공사 수하물 추적 데이터에서 최초 스테이션 MEL의 위탁 수하물에 대해 수행된 모든 활동을 인쇄합니다. 작업을 1분 간격으로 정렬합니다.

SELECT $b.actionAt,
       $b.actionCode,
       timestamp_round($b.actionTime, 'MINUTE') as actionTime
FROM baggageInfo bag, bag.bagInfo[0].flightLegs[0].actions[] AS $b
WHERE bag.bagInfo[0].flightLegs[0].fltRouteSrc = "MEL"

설명: 이 질의에서 timestamp_round 함수를 MINUTE 단위와 함께 사용하여 actionTime를 가장 가까운 분으로 반올림합니다.

승객의 위탁 수하물 여러 개로 인한 결과 중복을 방지하려면 이 질의에서 bagInfo 배열의 첫 번째 요소만 고려합니다.

출력:

{"actionAt":"MEL","actionCode":"ONLOAD to LAX","actionTime":"2019-03-01T12:20:00Z"}
{"actionAt":"MEL","actionCode":"BagTag Scan at MEL","actionTime":"2019-03-01T11:52:00Z"}
{"actionAt":"MEL","actionCode":"Checkin at MEL","actionTime":"2019-03-01T11:43:00Z"}

예 4 - 2019년 1월 1일부터 버킷이 있는 12시간마다 IST 공항에서 출발하는 승객 수에 대한 통계를 인출합니다. 2019년 2월의 데이터만 고려합니다.

SELECT $t AS DATE,
count($t) AS FLIGHTCOUNT
FROM BaggageInfo bag, bag.bagInfo[0].flightLegs[] $f,
timestamp_bucket($f.flightDate, '12 HOURS', '2019-01-01T00') $t
WHERE $f.fltRouteSrc =any "IST" AND timestamp_floor($f.flightDate, 'MONTH') = '2019-02-01T00:00:00Z'
GROUP BY $t
ORDER BY $t

설명: 2019년 2월에 출장하는 승객을 고려하려면 timestamp_floor 함수를 사용하고 flightDate를 월초로 반올림합니다. 결과를 "2019-02-01T00:00:00Z" 문자열과 비교합니다. 이 예에서는 날짜를 ISO-8601 형식의 문자열로 제공합니다. 이 문자열은 암시적으로 CAST를 TIMESTAMP 값으로 가져옵니다.

IST 공항에서 이동하는 항공편을 포함하려면 배열 생성자 [ ]를 사용하여 flightLegs가 배열임을 나타내고 검색에서 각 fltRouteSrc 배열 요소를 고려합니다.

간격이 12시간이고 원점이 2019년 1월 1일인 flightDate 필드에서 timsestamp_bucket 함수를 사용합니다.

출력:

{"DATE":"2019-02-02T12:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-04T00:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-04T12:00:00.000000000Z","FLIGHTCOUNT":2}
{"DATE":"2019-02-07T12:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-11T12:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-12T00:00:00.000000000Z","FLIGHTCOUNT":2}
{"DATE":"2019-02-12T12:00:00.000000000Z","FLIGHTCOUNT":1}

시간 기록 형식 함수

format_timestampparse_to_timestamp 함수를 사용하여 시간 기록 값의 형식을 지정할 수 있습니다. 또한 to_last_day_of_month 함수를 사용하여 지정된 시간 기록에서 월의 마지막 날을 인출할 수 있습니다.

예 1 - 특정 티켓 번호가 있는 승객의 경우 pattern 및 입력된 timezone에 따라 첫 번째 구간에 예상 도착 시간을 인쇄합니다.

SELECT $info.estimatedArrival,
format_timestamp($info.estimatedArrival, "MMM dd, yyyy HH:mm:ss O", "America/Vancouver") AS FormattedTimestamp
FROM BaggageInfo bag, bag.bagInfo.flightLegs[0] AS $info
WHERE ticketNo= 1762399766476

설명: 이 질의에서 timestamp 문자열을 지정된 "MMM dd, yyyy HH:mm:ss" 패턴으로 변환하기 위해 format_timestamp 함수에 대한 인수로 estimatedArrival 필드 patterntimezone의 전체 이름을 지정합니다.

주: pattern 인수의 'O' 문자는 결과 문자열의 Greenwich/UTC와 다른 시간을 인쇄하는 ZoneOffset을 나타냅니다.

출력:

{"estimatedArrival":"2019-02-03T06:00:00Z","FormattedTimestamp":"Feb 02, 2019 22:00:00 GMT-8"}

예제 2 - 영역 오프셋을 포함하는 지정된 pattern를 사용하여 지정된 string를 시간 기록으로 구문 분석합니다.

SELECT format_timestamp(parse_to_timestamp('2024/02/12 18:30:54 GMT+02:00', "yyyy/dd/MM HH:mm:ss OOOO"),"yyyy-MM-dd HH:mm:ss OOOO","GMT+02:00")AS TIMESTAMP
FROM BaggageInfo
WHERE ticketNo=1762390789239

설명: 이 질의에서 string 인수는 TimeZoneID, GMT+02:00을 가지므로 pattern 인수는 영역 기호 또는 ZoneOffset을 포함해야 합니다. format_timestamp 함수에 래핑된 경우 출력 시간 기록이 GMT+02:00 시간대에 표시됩니다.

출력:

{"TIMESTAMP":"2024-12-02 18:30:54 GMT+02:00"}

예 3 - 가입자의 경우 계정 가입이 만료되는 월의 마지막 날을 인쇄합니다.

SELECT sa.acct_id, to_last_day_of_month(sa.account_expiry) AS lastday FROM stream_acct sa WHERE profile_name="DM"

출력:

{"acct_id":4,"lastday":"2024-03-31T00:00:00Z"}

시간기록 추출 함수

시간 기록 추출 함수는 제공된 시간 기록에서 해당 날짜, 주 또는 인덱스 값을 인출합니다.

일자 추출 함수는 시간기록에서 해당 연도/월/일/시간/분/초/밀리초/마이크로초/나노초를 반환합니다.

예 1 - 항공 수하물 추적 데이터에서 승객의 통합 출장 세부 정보를 가져옵니다.

항공 응용 프로그램에서는 승객이 예정된 여행 세부 정보를 신속하게 요약하는 것이 좋습니다. 기타 시간 기능을 사용하여 BaggageInfo 테이블에서 승객의 통합된 출장 세부정보를 가져올 수 있습니다.

SELECT DISTINCT
$s.fullName,
$s.bagInfo[].flightLegs[].flightNo AS flightnumbers,
$s.bagInfo[].flightLegs[].fltRouteSrc AS From,
concat ($t1,":", $t2,":", $t3) AS Traveldate
FROM baggageinfo $s, $s.bagInfo[].flightLegs[].flightDate AS $bagInfo,
day(CAST($bagInfo AS Timestamp(0))) $t1,
month(CAST($bagInfo AS Timestamp(0))) $t2,
year(CAST($bagInfo AS Timestamp(0))) $t3

설명:

시간 함수를 사용하여 출장 날짜, 월 및 연도를 검색할 수 있습니다. concat 문자열 함수는 검색된 출장 레코드를 연결하여 애플리케이션에서 원하는 형식으로 표시하는 데 사용됩니다. 먼저 CAST 표현식을 사용하여 flightDates를 TIMESTAMP로 변환한 다음 시간 기록에서 날짜, 월 및 연도 세부 정보를 인출합니다.

출력:

{"fullName":"Adam Phillips","flightnumbers":["BM604","BM667"],"From":["MIA","LAX"],"Traveldate":"1:2:2019"}

{"fullName":"Adelaide Willard","flightnumbers":["BM79","BM907"],"From":["GRU","ORD"],"Traveldate":"15:2:2019"}

이 질의는 승객에 대한 빠른 조회 역할을 할 수 있는 항공편 세부정보를 반환합니다.

주 추출 함수는 시간 기록에서 해당 주/주를 반환합니다.

예 2 - 승객의 출장 일자에서 주 및 ISO 주 번호를 확인합니다.

SELECT
$s.fullName,
$s.contactPhone,
week(CAST($bagInfo.flightLegs[1].flightDate AS Timestamp(0))) AS TravelWeek,
isoweek(CAST($bagInfo.flightLegs[1].flightDate AS Timestamp(0))) AS ISO_TravelWeek
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo

설명: 먼저 CAST 표현식을 사용하여 flightDate를 TIMESTAMP로 변환한 다음 시간 기록에서 주 및 isoweek를 인출합니다.

출력:

{"fullName":"Adelaide Willard","contactPhone":"421-272-8082","TravelWeek":7,"ISO_TravelWeek":7}

{"fullName":"Adam Phillips","contactPhone":"893-324-1064","TravelWeek":5,"ISO_TravelWeek":5}

시간기록 인덱스 추출 함수는 시간기록에서 해당 분기/주/월/년 인덱스를 반환합니다.

예제 3 - 지정된 시간 기록의 요일을 찾습니다.

SELECT day_of_week("2024-06-19") AS DAYVAL1,
day_of_week(parse_to_timestamp('06/19/24', 'MM/dd/yy')) AS DAYVAL2
FROM BaggageInfo
WHERE ticketNo=1762344493810

설명: 질의의 두번째 시간 기록이 지원되지 않는 형식인 '06/19/24'이므로 parse_to_timestamp 함수에 래핑하여 유효하게 만듭니다.

출력:

{
  "DAYVAL1" : 3,
  "DAYVAL2" : 3
}

현재 시간 기능

current_time_milliscurrent_time 함수를 사용하여 현재 시간을 인출할 수 있습니다. current_time_millis 함수는 시간을 밀리초 수로 반환합니다. current_time 함수는 시간을 시간 기록 값으로 반환합니다.

예 1 - 승객의 최종 출장 일자와 현재 일자 사이의 시간 경과를 확인합니다.

항공 응용 프로그램에서는 일부 고객이 매우 자주 여행하며 마일리지를 자주 받을 수 있습니다. 승객의 마지막 여행 날짜와 현재 날짜 사이의 시간 경과를 결정하여 이러한 보상 프로그램에 대해 고려할 수 있는지 평가할 수 있습니다.

SELECT
$s.fullName,
$s.contactPhone,
get_duration(timestamp_diff(current_time(), CAST($bagInfo.flightLegs[1].flightDate AS Timestamp(0)))) AS LastTravel
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo

설명:

current_time 함수를 사용하여 현재 시간을 가져올 수 있습니다. 마지막 출장 날짜와 현재 날짜 사이의 시간 범위를 확인하려면 마지막 출장 시간과 함께 get_duration/timestamp_diff 함수에 현재 시간을 제공할 수 있습니다. 자세한 내용은 timestamp_diffget_duration 함수를 참조하십시오.

출력:

{"fullName":"Adelaide Willard","contactPhone":"421-272-8082","LastTravel":"1453 days 6 hours 20 minutes 56 seconds 601 milliseconds"}

{"fullName":"Adam Phillips","contactPhone":"893-324-1064","LastTravel":"1451 days 23 hours 19 minutes 39 seconds 543 milliseconds"}

current_time 함수를 사용하여 현재 시간을 계산합니다. timestamp_diff 함수를 사용하여 현재 시간과 최종 비행 날짜 간의 시간 차이를 계산합니다. 먼저 CAST 표현식을 사용하여 flightDates를 TIMESTAMP로 변환한 다음 시간 기록에서 일, 월 및 연도 세부 정보를 인출합니다. timestamp_diff 함수는 두 시간 기록 값 사이의 밀리초 수를 반환하므로 get_duration 함수를 사용하여 밀리초를 기간 문자열로 변환합니다.

get_duration 함수는 반환 값에 따라 밀리초를 일, 시간, 분, 초 및 밀리초로 변환합니다. 다음 변환은 계산 목적으로 고려됩니다.

1000 milliseconds = 1 second
60 seconds = 1 minute
60 minutes = 1 hour
24 hours = 1 day

예를 들어, timestamp_diff 함수가 129084684821밀리초 값을 반환하는 경우 get_duration 함수는 해당 값을 1494일 52분 4초 687밀리초로 변환합니다.

QueryRequest API를 사용하는 예제

QueryRequest API를 사용하고 SQL 함수를 적용하여 NoSQL 테이블에서 데이터를 인출할 수 있습니다.

질의를 실행하려면 NoSQLHandle.query() API를 사용합니다.

SQLFunctions.java 예제를 통해 여기에서 전체 코드를 다운로드하십시오.

 //Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
   try (
      QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
      QueryIterableResult results = handle.queryIterable(queryRequest)){
      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
}
String ts_func1="SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")"+
                         " AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using timestamp_add function ");
fetchRows(handle,ts_func1);
String ts_func2="SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate, "+
                "get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff "+
                 "FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg "+
                 "WHERE ticketNo=1762344493810";
System.out.println("Using get_duration and timestamp_diff function ");
fetchRows(handle,ts_func2);

query를 실행하려면 borneo.NoSQLHandle.query() 메소드를 사용합니다.

SQLFunctions.py 예제를 통해 여기에서 전체 코드를 다운로드하십시오.

# Fetch data from the table
def fetch_data(handle,sqlstmt):
   request = QueryRequest().set_statement(sqlstmt)
   print('Query results for: ' + sqlstmt)
   result = handle.query(request)
   for r in result.get_results():
      print('\t' + str(r))
 ts_func1 = '''SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
                 AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using timestamp_add function:')
fetch_data(handle,ts_func1)

ts_func2 = '''SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
              get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
              FROM baggageinfo $s,
              $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
              WHERE ticketNo=1762344493810'''
print('Using get_duration and timestamp_diff function:')
fetch_data(handle,ts_func2)

질의를 실행하려면 Client.Query 함수를 사용합니다.

SQLFunctions.go 예제를 통해 여기에서 전체 코드를 다운로드하십시오.

 //fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
   prepReq := &nosqldb.PrepareRequest{
		Statement: querystmt,
   }
   prepRes, err := client.Prepare(prepReq)
   if err != nil {
      fmt.Printf("Prepare failed: %v\n", err)
      return
   }
   queryReq := &nosqldb.QueryRequest{
		 PreparedStatement: &prepRes.PreparedStatement,   }
   var results []*types.MapValue
   for {
      queryRes, err := client.Query(queryReq)
      if err != nil {
         fmt.Printf("Query failed: %v\n", err)
  	return
      }
      res, err := queryRes.GetResults()
      if err != nil {
         fmt.Printf("GetResults() failed: %v\n", err)
  	return
      }
      results = append(results, res...)
      if queryReq.IsDone() {
         break
      }
   }
   for i, r := range results {
      fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
   }
}
ts_func1 := `SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
                AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using timestamp_add function::\n")
fetchData(client, err,tableName,ts_func1)

ts_func2 := `SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
             get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
             FROM baggageinfo $s,
             $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
             WHERE ticketNo=1762344493810`
fmt.Printf("Using get_duration and timestamp_diff function:\n")
fetchData(client, err,tableName,ts_func2)

질의를 실행하려면 query 메소드를 사용합니다.

JavaScript: SQLFunctions.js 예제의 전체 코드를 다운로드하십시오.

  //fetches data from the table
async function fetchData(handle,querystmt) {
   const opt = {};
   try {
      do {
         const result = await handle.query(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}

TypeScript: SQLFunctions.ts 예제에서 전체 코드를 다운로드하십시오.

interface StreamInt {
   acct_Id: Integer;
   profile_name: String;
   account_expiry: TIMESTAMP;
   acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: string) {
   const opt = {};
   try {
      do {
         const result = await handle.query<StreamInt>(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
const ts_func1 = `SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
                  AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using timestamp_add function:");
await fetchData(handle,ts_func1);

const ts_func2 = `SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
                  get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
                  FROM baggageinfo $s,
                  $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
                  WHERE ticketNo=1762344493810`
console.log("Using get_duration and timestamp_diff function:");
await fetchData(handle,ts_func2);

질의를 실행하기 위해 QueryAsync 메소드를 호출하거나 GetQueryAsyncEnumerable 메소드를 호출하여 결과 비동기 열거형을 반복할 수 있습니다.

SQLFunctions.cs 예제를 통해 여기에서 전체 코드를 다운로드하십시오.

private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
}

private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
   Console.WriteLine("  Query results:");
   await foreach (var result in queryEnumerable) {
      foreach (var row in result.Rows)
      {
         Console.WriteLine();
         Console.WriteLine(row.ToJsonString());
      }
   }
}
private const string ts_func1 =@"SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, ""5 minutes"")
                                       AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing timestamp_add function!");
await fetchData(client,ts_func1);

private const string ts_func2 =@"SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
                                       get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
                                       FROM baggageinfo $s,
                                       $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
                                       WHERE ticketNo=1762344493810";
Console.WriteLine("\nUsing get_duration and timestamp_diff function!");
await fetchData(client,ts_func2);

관련 항목