이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.배트맨 토토 PostgreSQL : 문서 : 17 : 34.6. PGTYPES 라이브러리버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

33.6. pgtypes 라이브러리

pgtypes 라이브러리 맵포스트그레SQL데이터베이스 유형을 C와 동등하게 C 프로그램에서 사용할 수 있는 것입니다. 할 수 있는 기능도 제공합니다 C 내의 해당 유형을 사용한 기본 계산, 즉 의 도움포스트그레SQL서버. 보다 다음 예:

EXEC SQL 시작 선언 섹션;
   날짜 날짜1;
   타임스탬프 ts1, tsout;
   간격 iv1;
   문자 *출력;
EXEC SQL END 선언 섹션;

PGTYPESdate_today(&date1);
EXEC SQL SELECT 시작됨, 기간 INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
out = PGTYPEStimestamp_to_asc(&tsout);
printf("시작 + 기간: %s\n", out);
PGTYPESchar_free(아웃);

33.6.1. 문자열

다음과 같은 일부 기능PGTYPESnumeric_to_asc포인터를 반환합니다. 새로 할당된 문자열. 이 결과는 공개되어야 합니다. 와 함께PGTYPESchar_free대신무료. (이것은 다음에서만 중요합니다. 때때로 메모리 할당 및 해제가 필요한 Windows 동일한 라이브러리에서 수행되었습니다.)

33.6.2. 와이즈 토토 유형

와이즈 토토 유형은 임의의 값으로 계산을 수행하는 기능을 제공합니다. 정도. 보다PostgreSQL : 문서 : 9.3 : 스포츠 토토 결과 유형용 의 동등한 유형PostgreSQL서버. 임의적이기 때문에 정밀도 이 변수는 확장 및 축소가 가능해야 합니다. 동적으로. 그렇기 때문에 와이즈 토토 변수만 생성할 수 있습니다. 힙은를 통해PGTYPESnumeric_new그리고PGTYPESnumeric_free함수. 십진수 유형, 유사하지만 정밀도가 제한되어 있는 스택뿐만 아니라 힙에도 있습니다.

다음 함수는 숫자 작업에 사용할 수 있습니다 유형:

PGTYPESnumeric_new

새로 할당된 와이즈 토토 변수에 대한 포인터를 요청합니다.

숫자 *PGTYPESnumeric_new(void);
PGTYPESnumeric_free

와이즈 토토 유형을 해제하고 모든 메모리를 해제합니다.

void PGTYPESnumeric_free(숫자 *var);
PGTYPESnumeric_from_asc

문자열 표기법에서 와이즈 토토 유형을 분석합니다.

숫자 *PGTYPESnumeric_from_asc(char *str, char **endptr);

유효한 형식은 예를 들면 다음과 같습니다:-2, .794, +3.44, 592.49E07또는-32.84e-4. 값을 구문 분석할 수 있는 경우 성공적으로, 유효한 포인터가 반환되고, 그렇지 않으면 NULL 포인터가 반환됩니다. 현재 ECPG는 항상 전체 문자열을 구문 분석하므로 현재 첫 번째 주소 저장을 지원하지 않습니다. 잘못된 문자입니다.*endptr. 당신은 할 수 있습니다 안전하게 설정됨endptrNULL로.

PGTYPESnumeric_to_asc

다음에 의해 할당된 문자열에 대한 포인터를 반환합니다.malloc다음의 문자열 표현을 포함합니다. 숫자 유형num.

char *PGTYPESnumeric_to_asc(숫자 *num, int dscale);

숫자 값은 다음과 같이 인쇄됩니다.dscale십진수, 반올림이 적용되는 경우 필요한. 결과는 다음을 사용하여 해제되어야 합니다.PGTYPESchar_free().

PGTYPESnumeric_add

두 개의 와이즈 토토 변수를 세 번째 변수에 추가하세요.

int PGTYPESnumeric_add(숫자 *var1, 숫자 *var2, 숫자 *결과);

함수는 변수를 추가합니다var1그리고var2결과 변수에결과. 이 함수는 성공 시 0을 반환합니다. 오류가 있는 경우 -1입니다.

PGTYPESnumeric_sub

두 개의 숫자 변수를 빼고 세 번째 변수에 결과를 반환합니다. 하나.

int PGTYPESnumeric_sub(숫자 *var1, 숫자 *var2, 숫자 *result);

함수는 변수를 뺍니다var2변수에서var1. 작업 결과는 다음 위치에 저장됩니다. 변하기 쉬운결과. 이 함수는 0을 반환합니다. 성공하고 오류가 발생하면 -1입니다.

PGTYPESnumeric_mul

두 개의 숫자 변수를 곱하고 결과를 세 번째로 반환 하나.

int PGTYPESnumeric_mul(숫자 *var1, 숫자 *var2, 숫자 *result);

함수는 변수를 곱합니다var1그리고var2. 결과 작업의 내용은 변수에 저장됩니다.결과. 이 함수는 성공 시 0을 반환하고 실패 시 -1을 반환합니다. 오류가 발생한 경우입니다.

PGTYPESnumeric_div

두 개의 숫자 변수를 나누고 결과를 세 번째 변수로 반환 하나.

int PGTYPESnumeric_div(숫자 *var1, 숫자 *var2, 숫자 *결과);

함수는 변수를 나눕니다.var1byvar2. 수술 결과는 변수에 저장됨결과. 그만큼 함수는 성공하면 0을 반환하고 오류가 발생하면 -1을 반환합니다.

PGTYPESnumeric_cmp

두 개의 와이즈 토토 변수를 비교하십시오.

int PGTYPESnumeric_cmp(숫자 *var1, 숫자 *var2)

이 함수는 두 개의 와이즈 토토 변수를 비교합니다. 오류가 있는 경우,INT_MAX반환되었습니다. 성공하면, 함수는 세 가지 가능한 결과 중 하나를 반환합니다.

  • 1, 만약var1보다 큼var2

  • -1, ifvar1보다 작음var2

  • 0, ifvar1그리고var2동등함

PGTYPESnumeric_from_int

int 변수를 와이즈 토토 변수로 변환합니다.

int PGTYPESnumeric_from_int(signed int int_val, 숫자 *var);

이 함수는 signed int 유형의 변수를 받아들이고 저장합니다. 와이즈 토토 변수에 있습니다.var. 에 성공하면 0이 반환되고 실패하면 -1이 반환됩니다.

PGTYPESnumeric_from_long

long int 변수를 와이즈 토토 변수로 변환합니다.

int PGTYPESnumeric_from_long(signed long int long_val, 숫자 *var);

이 함수는 signed long int 유형의 변수를 허용하며 와이즈 토토 변수에 저장합니다.var. 성공하면 0이 반환되고, 실패하면 -1이 반환됩니다.

PGTYPESnumeric_copy

하나의 와이즈 토토 변수를 다른 변수에 복사합니다.

int PGTYPESnumeric_copy(숫자 *src, 숫자 *dst);

이 함수는 변수의 값을 복사합니다.src다음 변수를 가리킵니다.dst을 가리킵니다. 성공하면 0을 반환하고 -1 오류가 발생하면.

PGTYPESnumeric_from_double

double 유형의 변수를 와이즈 토토로 변환합니다.

int PGTYPESnumeric_from_double(double d, 숫자 *dst);

이 함수는 double 유형의 변수를 받아들이고 결과는 다음과 같습니다.dst을 가리킵니다. 성공하면 0을 반환하고, 오류가 발생하면 -1을 반환합니다.

PGTYPESnumeric_to_double

와이즈 토토 유형의 변수를 double로 변환합니다.

int PGTYPESnumeric_to_double(숫자 *nv, double *dp)

이 함수는 변수의 와이즈 토토 값을 변환합니다.nv이중 변수를 가리킵니다dp을 가리킵니다. 성공하면 0을 반환하고 오버플로를 포함하여 오류가 발생하면 -1입니다. 오버플로 시 전역 변하기 쉬운errno다음으로 설정됩니다PGTYPES_NUM_OVERFLOW추가로.

PGTYPESnumeric_to_int

와이즈 토토 유형의 변수를 정수로 변환합니다.

int PGTYPESnumeric_to_int(숫자 *nv, int *ip);

이 함수는 다음과 같은 변수의 숫자 값을 변환합니다.nv정수 변수를 가리킵니다. 저것ip을 가리킵니다. 성공하면 0을 반환합니다. 오버플로를 포함하여 오류가 발생하면 -1입니다. 오버플로 시, 전역 변수errno다음으로 설정됩니다PGTYPES_NUM_OVERFLOW추가로.

PGTYPESnumeric_to_long

와이즈 토토 유형의 변수를 긴 변수로 변환합니다.

int PGTYPESnumeric_to_long(숫자 *nv, 긴 *lp);

이 함수는 변수의 와이즈 토토 값을 변환합니다.nv긴 정수를 가리킵니다. 변수 그lp을 가리킵니다. 0을 반환합니다. 성공하면 -1이고 오버플로를 포함하여 오류가 발생하면 -1입니다. ~에 오버플로, 전역 변수errno할 것이다 로 설정됨PGTYPES_NUM_OVERFLOW추가로.

PGTYPESnumeric_to_decimal

와이즈 토토 유형의 변수를 십진수로 변환합니다.

int PGTYPESnumeric_to_decimal(숫자 *src, 십진수 *dst);

이 함수는 다음과 같은 변수의 숫자 값을 변환합니다.src10진수 변수를 가리킵니다. 저것dst을 가리킵니다. 에 0을 반환합니다. 성공하고 오버플로를 포함하여 오류가 발생하면 -1입니다. 오버플로 시, 전역 변수errno다음으로 설정됩니다PGTYPES_NUM_OVERFLOW추가로.

PGTYPESnumeric_from_decimal

10진수 유형의 변수를 와이즈 토토로 변환합니다.

int PGTYPESnumeric_from_decimal(십진수 *src, 숫자 *dst);

이 함수는 변수의 십진수 값을 변환합니다.src와이즈 토토 변수를 가리킵니다. 저것dst을 가리킵니다. 에 0을 반환합니다. 성공하고 오류가 발생하면 -1입니다. 십진수 유형이기 때문에 와이즈 토토 유형인 오버플로의 제한된 버전으로 구현되었습니다. 이 변환에서는 발생할 수 없습니다.

33.6.3. 날짜 유형

C의 날짜 유형을 사용하면 프로그램에서 다음의 데이터를 처리할 수 있습니다. SQL 유형 날짜. 보다PostgreSQL : 문서 : 9.3 : 날짜/배트맨 토토 유형에 해당하는 유형에 대한PostgreSQL서버.

다음 함수를 사용하여 날짜 작업을 할 수 있습니다 유형:

PGTYPESdate_from_timestamp

타임스탬프에서 날짜 부분을 추출합니다.

날짜 PGTYPESdate_from_timestamp(timestamp dt);

함수는 타임스탬프를 유일한 인수로 받고 이 타임스탬프에서 추출된 날짜 부분을 반환합니다.

PGTYPESdate_from_asc

텍스트 표현에서 날짜를 분석합니다.

날짜 PGTYPESdate_from_asc(char *str, char **endptr);

함수는 C char* 문자열을 받습니다.str및 C char* 문자열에 대한 포인터endptr. 현재 ECPG는 항상 완전한 문자열이므로 현재는 저장을 지원하지 않습니다. 의 첫 번째 유효하지 않은 문자 주소*endptr. 안전하게 설정할 수 있습니다endptrNULL로.

함수는 항상 MDY 형식의 날짜를 가정하고 현재 ECPG 내에서 이를 변경할 수 있는 변수는 없습니다.

표 33-2허용되는 입력 형식을 보여줍니다.

표 33-2. 유효한 입력 형식PGTYPESdate_from_asc

입력 결과
1999년 1월 8일 1999년 1월 8일
1999-01-08 1999년 1월 8일
1/8/1999 1999년 1월 8일
1/18/1999 1999년 1월 18일
01/02/03 2003년 2월 1일
1999년 1월 8일 1999년 1월 8일
1999년 1월 8일 1999년 1월 8일
1999년 1월 8일 1999년 1월 8일
99년 1월 8일 1999년 1월 8일
99년 1월 8일 1999년 1월 8일
06년 1월 8일 2006년 1월 8일
1월 08-99 1999년 1월 8일
19990108 ISO 8601; 1999년 1월 8일
990108 ISO 8601; 1999년 1월 8일
1999.008 연도 및 일
J2451187 율리우스력의 날
기원전 99년 1월 8일 서기 99년 전
PGTYPESdate_to_asc

날짜 변수의 텍스트 표현을 반환합니다.

char *PGTYPESdate_to_asc(날짜 dDate);

함수는 날짜를 수신합니다d날짜다음과 같이 유일한 매개변수입니다. 날짜가 형식으로 출력됩니다.1999-01-18, 즉,YYYY-MM-DD형식. 결과는 다음을 사용하여 해제되어야 합니다.PGTYPESchar_free().

PGTYPESdate_julmdy

일, 월, 연도 값을 추출합니다. 날짜 유형의 변수입니다.

void PGTYPESdate_julmdy(날짜 d, int *mdy);

함수는 날짜를 수신합니다d그리고 3개의 정수 값 배열에 대한 포인터mdy. 변수 이름은 순차를 나타냅니다. 주문하다:mdy[0]다음을 포함하도록 설정됩니다. 달의 숫자,mdy[1]다음으로 설정됩니다 오늘의 가치와mdy[2]할 것이다 연도를 포함합니다.

PGTYPESdate_mdyjul

다음을 지정하는 3개의 정수 배열에서 날짜 값을 생성합니다. 날짜의 일, 월, 연도입니다.

void PGTYPESdate_mdyjul(int *mdy, 날짜 *jdate);

함수는 3개의 정수 배열을 받습니다(mdy)를 첫 번째 인수로, 두 번째 인수로 인수를 보유해야 하는 날짜 유형의 변수에 대한 포인터 작업 결과입니다.

PGTYPESdate_dayofweek

날짜의 요일을 나타내는 와이즈 토토를 반환합니다. 값.

int PGTYPESdate_dayofweek(날짜 d);

함수는 날짜 변수를 받습니다.d유일한 인수로 사용하고 다음과 같은 정수를 반환합니다. 이 날짜의 요일을 나타냅니다.

  • 0 - 일요일

  • 1 - 월요일

  • 2 - 화요일

  • 3 - 수요일

  • 4 - 목요일

  • 5 - 금요일

  • 6 - 토요일

PGTYPESdate_today

현재 날짜를 가져옵니다.

void PGTYPESdate_today(date *d);

함수는 날짜 변수에 대한 포인터를 받습니다(d) 현재 날짜로 설정됩니다.

PGTYPESdate_fmt_asc

날짜 유형의 변수를 텍스트 표현으로 변환 형식 마스크를 사용합니다.

int PGTYPESdate_fmt_asc(date dDate, char *fmtstring, char *outbuf);

함수는 변환할 날짜를 받습니다 (d날짜), 형식 마스크(fmtstring) 및 텍스트를 담을 문자열 날짜 표현(outbuf).

성공 시 0이 반환되고 오류인 경우 음수 값이 반환됩니다. 발생했습니다.

다음 리터럴은 사용할 수 있는 필드 지정자입니다:

  • dd- 날짜의 수 월.

  • mm- 해당 월의 와이즈 토토 년도.

  • yy- 2로 표시된 연도의 수 와이즈 토토.

  • yyyy- 4로 표시된 연도의 수 와이즈 토토.

  • ddd- 오늘의 이름 (축약).

  • - 월 이름 (축약).

다른 모든 문자는 출력 문자열에 1:1로 복사됩니다.

테이블 33-3몇 가지 가능한 형식을 나타냅니다. 이것은 당신에게 줄 것입니다 이 기능을 사용하는 방법에 대한 아이디어. 모든 출력 라인은 다음을 기반으로 합니다. 같은 날짜: 1959년 11월 23일.

표 33-3. 유효한 입력 형식PGTYPESdate_fmt_asc

형식 결과
mmddyy 112359
ddmmyy 231159
yymmdd 591123
yy/mm/dd 59/11/23
yy mm dd 59 11 23
yy.mm.dd 59.11.23
.mm.yyyy.dd. .11.1959.23.
음. dd, yyyy 11월. 1959년 23일
mmmm dd yyyy 1959년 11월 23일
yyyy dd mm 1959 23 11
ddd, 음. dd, yyyy 1959년 11월 23일 월요일
(ddd) 음. dd, yyyy (월) 1959년 11월 23일
PGTYPESdate_defmt_asc

형식 마스크를 사용하여 C를 변환문자*문자열을 날짜 유형의 값으로 변환합니다.

int PGTYPESdate_defmt_asc(date *d, char *fmt, char *str);

함수는 날짜 값에 대한 포인터를 받습니다. 작업 결과를 보유합니다(d), 날짜 구문 분석에 사용할 형식 마스크(fmt) 및 텍스트를 포함하는 C char* 문자열 날짜 표현(str). 그만큼 텍스트 표현은 형식 마스크와 일치해야 합니다. 그러나 문자열을 문자열에 1:1 매핑할 필요는 없습니다. 형식 마스크. 이 함수는 순차 순서만 분석하고 리터럴을 찾습니다.yy또는yyyy연도의 위치를 ​​나타내는,mm월의 위치를 ​​나타냄 그리고dd위치를 나타냅니다. 낮.

테이블 33-4몇 가지 가능한 형식을 나타냅니다. 이것은 당신에게 줄 것입니다 이 기능을 사용하는 방법에 대한 아이디어입니다.

표 33-4. 유효한 입력 형식rdefmtdate

형식 문자열 결과
ddmmy 21-2-54 1954-02-21
ddmmyy 2-12-54 1954-12-02
ddmmyy 20111954 1954-11-20
ddmmyy 130464 1964-04-13
mmm.dd.yyyy 1967년 3월 12일 1967-03-12
yy/mm/dd 1954년 2월 3일 1954-02-03
mmm.dd.yyyy 041269 1969-04-12
yy/mm/dd 2525년 7월에, 인류는 28일째에 살아 있을 것이다 2525-07-28
dd-mm-yy 나는 올해 7월 28일에 말했습니다. 2525 2525-07-28
mmm.dd.yyyy 9/14/58 1958-09-14
yy/mm/dd 47/03/29 1947-03-29
mmm.dd.yyyy 1975년 10월 28일 1975-10-28
mmddyy 1985년 11월 14일 1985-11-14

33.6.4. 타임스탬프 유형

C의 타임스탬프 유형을 사용하면 프로그램에서 데이터를 처리할 수 있습니다. SQL 유형의 타임스탬프입니다. 보다섹션 8.5동등한 유형의 경우 그만큼포스트그레SQL서버.

다음 함수는 타임스탬프 작업에 사용할 수 있습니다 유형:

PGTYPEStimestamp_from_asc

텍스트 표현에서 타임스탬프를 분석하여 타임스탬프 변수입니다.

타임스탬프 PGTYPEStimestamp_from_asc(char *str, char **endptr);

함수는 구문 분석할 문자열을 받습니다(str) 및 C 문자에 대한 포인터*(endptr). 현재 ECPG는 항상 완전한 문자열이므로 현재는 저장을 지원하지 않습니다. 의 첫 번째 유효하지 않은 문자 주소*endptr. 안전하게 설정할 수 있습니다endptrNULL로.

함수는 성공 시 구문 분석된 타임스탬프를 반환합니다. 오류 발생 시,PGTYPESInvalidTimestamp반환되었으며errno다음으로 설정됨PGTYPES_TS_BAD_TIMESTAMP. 보다PGTYPESInvalidTimestamp중요한 참고 사항은 다음과 같습니다. 이 값입니다.

일반적으로 입력 문자열에는 다음의 모든 조합이 포함될 수 있습니다. 허용되는 날짜 지정, 공백 문자 및 허용되는 시간 사양. 시간대는 ECPG에서 지원되지 않습니다. 구문 분석할 수 있지만 다음과 같이 계산을 적용하지 않습니다.PostgreSQL서버가 수행하는 작업 예. 시간대 지정자는 자동으로 삭제됩니다.

테이블 33-5입력 문자열에 대한 몇 가지 예가 포함되어 있습니다.

표 33-5. 유효한 입력 형식PGTYPEStimestamp_from_asc

입력 결과
1999-01-08 04:05:06 1999-01-08 04:05:06
1999년 1월 8일 04:05:06 PST 1999-01-08 04:05:06
1999-1-08 04:05:06.789-8 1999-01-08 04:05:06.789 (시간대 지정자는 무시됨)
J2451187 04:05-08:00 1999-01-08 04:05:00 (시간대 지정자 무시됨)
PGTYPEStimestamp_to_asc

날짜를 C 문자* 문자열로 변환합니다.

char *PGTYPEStimestamp_to_asc(timestamp tstamp);

함수는 타임스탬프를 수신합니다.tstamp유일한 인수로 할당된 값을 반환합니다. 타임스탬프의 텍스트 표현이 포함된 문자열입니다. 결과는 다음을 사용하여 해제되어야 합니다.PGTYPESchar_free().

PGTYPEStimestamp_current

현재 타임스탬프를 검색합니다.

void PGTYPEStimestamp_current(timestamp *ts);

함수는 현재 타임스탬프를 검색하고 다음 위치에 저장합니다. 타임스탬프 변수는ts포인트 에게.

PGTYPEStimestamp_fmt_asc

형식을 사용하여 타임스탬프 변수를 C 문자*로 변환 마스크.

int PGTYPEStimestamp_fmt_asc(timestamp *ts, char *output, int str_len, char *fmtstr);

함수는 다음과 같이 변환할 타임스탬프에 대한 포인터를 받습니다. 첫 번째 인수(ts), 포인터 출력 버퍼(출력), 최대 길이 출력 버퍼()에 할당된str_len) 및 사용할 형식 마스크 전환(fmtstr).

성공하면 함수는 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 오류가 발생했습니다.

형식 마스크에 다음 형식 지정자를 사용할 수 있습니다. 형식 지정자는strftime함수libc. 형식이 아닌 지정자는 모두 복사됩니다. 출력 버퍼에 넣습니다.

  • %A- 국가로 대체됩니다. 전체 요일 이름을 표현합니다.

  • %a- 국가로 대체됩니다. 축약된 요일 이름을 표현합니다.

  • %B- 국가로 대체됩니다. 전체 월 이름을 표현합니다.

  • %b- 국가로 대체됩니다. 약어로 된 월 이름을 표현합니다.

  • %C- 다음과 같이 (연도/100)로 대체됩니다. 십진수; 한 자리 숫자 앞에는 0이 옵니다.

  • %c- 국가로 대체됩니다. 시간과 날짜를 표현합니다.

  • %D-는와 동일합니다.%m/%d/%y.

  • %d- 다음 날짜로 대체됩니다. 월을 십진수(01-31)로 표시합니다.

  • %E* %O*- POSIX 로케일 확장. 시퀀스%Ec %EC %예 %EX %Ey %EY %Od %Oe %OH %OI %옴 %OM %OS %Ou %OU %OV %아아아아아아아아아아아아 %OW %Oy있습니다 대체 표현을 제공해야 합니다.

    추가로%OB구현됨 대체 월 이름을 나타냅니다(요일 없이 독립형으로 사용됨). 말하는).

  • %e- 다음과 같이 날짜로 대체됩니다. 십진수(1-31); 한 자리 숫자 앞에는 공백이 옵니다.

  • %F-는와 동일합니다.%Y-%m-%d.

  • %G- 십진수로 연도를 대체합니다. 세기를 포함한 숫자. 올해는 더 큰 것을 담고 있는 해이다. 주의 일부(월요일이 주의 첫날임).

  • %g- 에서와 같은 연도로 대체됩니다.%G, 그러나 10진수로 표시되지 않음 세기(00-99).

  • %H- 시간(24시간제)으로 대체됩니다. 시계)를 십진수(00-23)로 표시합니다.

  • %h-와 동일%b.

  • %I- 시간(12시간)으로 대체됩니다. 시계)를 십진수(01-12)로 표시합니다.

  • %j- 올해의 날짜로 대체됩니다. 십진수(001-366)로 표시됩니다.

  • %k- 시간(24시간제)으로 대체됩니다. 시계)를 10진수(0-23)로 표시합니다. 한 자리 와이즈 토토 앞에는 공백.

  • %l- 시간(12시간)으로 대체됩니다. 시계)를 십진수(1-12)로 표시합니다. 한 자리 와이즈 토토 앞에는 공백.

  • %M- 분으로 대체됩니다. 십진수(00-59).

  • %m- 월로 대체됩니다. 십진수(01-12).

  • %n- 개행 문자로 대체됩니다.

  • %O*-와 동일%E*.

  • %p- 국가로 대체됩니다. 둘 중 하나의 표현"전 자오선"또는"포스트 메리디엠"적절하게.

  • %R-는와 동일합니다.%H:%M.

  • %r-는와 동일합니다.%I:%M:%S %p.

  • %S- 다음과 같이 두 번째로 대체됩니다. 십진수(00-60).

  • %s- 다음의 수로 대체됩니다. UTC Epoch 이후 초입니다.

  • %T-는와 동일합니다.%H:%M:%S

  • %t- 탭으로 대체됩니다.

  • %U- 다음의 주 수로 대체됩니다. 연도(한 주의 첫 번째 날인 일요일)를 십진수로 표시 (00-53).

  • %u- 평일(월요일)로 대체됩니다. 주의 첫날)을 십진수(1-7)로 표시합니다.

  • %V- 다음의 주 수로 대체됩니다. 연도(월요일이 주의 첫 번째 날)를 십진수로 표시 (01-53). 1월 1일이 포함된 주가 4일 이상인 경우 새해가 되면 1주차가 됩니다. 그렇지 않으면 다음 주 마지막 주입니다. 전년도이고 다음 주가 1주차입니다.

  • %v-는와 동일합니다.%e-%b-%Y.

  • %W- 다음의 주 수로 대체됩니다. 연도(월요일이 주의 첫 번째 날)를 십진수로 표시 (00-53).

  • %w- 평일(일요일)로 대체됩니다. 주의 첫날)을 십진수(0-6)로 표시합니다.

  • %X- 국가로 대체됩니다. 시간을 표현합니다.

  • %x- 국가로 대체됩니다. 날짜를 표현합니다.

  • %Y- 연도는 다음으로 대체됩니다. 세기를 십진수로 표시합니다.

  • %y- 없는 연도로 대체됩니다. 세기를 십진수(00-99)로 표시합니다.

  • %Z- 시간대로 대체됩니다. 이름.

  • %z- 시간대로 대체됩니다. UTC로부터의 오프셋; 앞의 더하기 기호는 UTC 동쪽을 의미합니다. UTC 서쪽의 빼기 기호, 시간과 분 뒤에 2가 붙습니다. 숫자 사이에 구분 기호가 없습니다(RFC 822의 일반 형식). 날짜 헤더).

  • %+- 국가로 대체됩니다. 날짜와 시간을 표현합니다.

  • %-*- GNU libc 확장. 아무것도하지 마십시오 수치 출력을 수행할 때 패딩.

  • $_* - GNU libc 확장. 명시적으로 공간을 지정합니다. 심.

  • %0*- GNU libc 확장. 명시적으로 패딩에 0을 지정하십시오.

  • %%- 다음으로 대체됨%.

PGTYPEStimestamp_sub

하나의 타임스탬프를 다른 타임스탬프에서 빼고 결과를 유형 간격의 변수입니다.

int PGTYPEStimestamp_sub(타임스탬프 *ts1, 타임스탬프 *ts2, 간격 *iv);

함수는 타임스탬프 변수를 뺄 것입니다.ts2타임스탬프 변수를 가리킵니다. 저것ts1다음을 가리키며 저장합니다. 그 결과 간격 변수가 생성됩니다.iv다음을 가리킨다.

성공하면 함수는 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 오류가 발생했습니다.

PGTYPEStimestamp_defmt_asc

다음을 사용하여 텍스트 표현에서 타임스탬프 값을 구문 분석합니다. 서식 지정 마스크.

int PGTYPEStimestamp_defmt_asc(char *str, char *fmt, timestamp *d);

함수는 타임스탬프의 텍스트 표현을 받습니다. 변수에서str그리고 변수에 사용할 서식 지정 마스크fmt. 결과는 다음과 같은 변수에 저장됩니다.d다음을 가리킨다.

포맷 마스크가 있는 경우fmt은 NULL입니다. 함수는 기본 형식화 마스크로 되돌아갑니다.%Y-%m-%d %H:%M:%S.

이것은 반대 기능입니다PGTYPEStimestamp_fmt_asc. 참조 가능한 것에 대해 알아 내기 위해 거기에 문서가 있습니다. 마스크 항목의 형식을 지정합니다.

PGTYPEStimestamp_add_interval

타임스탬프 변수에 간격 변수를 추가하세요.

int PGTYPEStimestamp_add_interval(timestamp *tin, 간격 *span, timestamp *tout);

함수는 타임스탬프 변수에 대한 포인터를 받습니다.주석및 간격 변수에 대한 포인터스팬. 간격을 추가합니다. 타임스탬프를 생성하고 결과 타임스탬프를 변수에 저장합니다.터우트다음을 가리킨다.

성공하면 함수는 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 오류가 발생했습니다.

PGTYPEStimestamp_sub_interval

타임스탬프 변수에서 간격 변수를 뺍니다.

int PGTYPEStimestamp_sub_interval(timestamp *tin, 간격 *span, timestamp *tout);

함수는 간격 변수를 뺍니다.스팬다음 타임스탬프 변수를 가리킵니다.주석결과를 가리키고 다음 위치에 저장합니다. 그 변수는tout다음을 가리킨다.

성공하면 함수는 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 오류가 발생했습니다.

33.6.5. 간격 유형

C의 간격 유형을 사용하면 프로그램에서 데이터를 처리할 수 있습니다. SQL 유형 간격. 보다섹션 8.5동등한 유형의 경우 그만큼PostgreSQL서버.

다음 함수는 간격 작업에 사용할 수 있습니다 유형:

PGTYPESinterval_new

새로 할당된 간격 변수에 대한 포인터를 반환합니다.

간격 *PGTYPESinterval_new(void);
PGTYPESinterval_free

이전에 할당된 간격의 메모리 해제 변하기 쉬운.

void PGTYPESinterval_new(간격 *intvl);
PGTYPESinterval_from_asc

텍스트 표현에서 간격을 구문 분석합니다.

간격 *PGTYPESinterval_from_asc(char *str, char **endptr);

함수는 입력 문자열을 구문 분석합니다.str그리고 할당된 간격에 대한 포인터를 반환합니다. 변하기 쉬운. 현재 ECPG는 항상 전체 문자열을 구문 분석하고 따라서 현재는 첫 번째 주소 저장을 지원하지 않습니다. 잘못된 문자입니다.*endptr. 당신은 할 수 있습니다 안전하게 설정됨endptrNULL로.

PGTYPESinterval_to_asc

간격 유형의 변수를 텍스트로 변환 대표.

char *PGTYPESinterval_to_asc(간격 *span);

이 함수는 간격 변수를 변환합니다.스팬C 문자*를 가리킵니다. 출력은 다음과 같습니다. 이 예:@ 1일 12시간 59분 10 초. 결과는 다음을 사용하여 해제되어야 합니다.PGTYPESchar_free().

PGTYPESinterval_copy

간격 유형의 변수를 복사하세요.

int PGTYPESinterval_copy(간격 *intvlsrc, 간격 *intvldest);

함수는 간격 변수를 복사합니다.intvlsrc다음 변수를 가리킵니다인텔베스트을 가리킵니다. 할당해야 한다는 점에 유의하세요. 이전의 대상 변수에 대한 메모리입니다.

33.6.6. 십진수 유형

십진수 유형은 숫자 유형과 유사합니다. 그러나 그것은 최대 정밀도는 유효 숫자 30자리로 제한됩니다. ~ 안에 힙에서만 생성할 수 있는 숫자 유형과 대조됩니다. Decimal 유형은 스택이나 힙에서 생성될 수 있습니다. (함수를 통해)PGTYPESdecimal_new그리고PGTYPESdecimal_free). 다른 것도 많이 있어요 에서 소수 유형을 처리하는 함수인포믹스에 설명된 호환 모드PostgreSQL : 문서 : 9.3 : 토토 베이 호환성 모드.

다음 함수는 소수 작업에 사용할 수 있습니다 유형이며에만 포함되지 않습니다.libcompat도서관.

PGTYPESdecimal_new

새로 할당된 십진수 변수에 대한 포인터를 요청합니다.

십진수 *PGTYPESdecimal_new(void);
PGTYPESdecimal_free

십진수 유형을 해제하고 모든 메모리를 해제합니다.

void PGTYPESdecimal_free(십진수 *var);

33.6.7. pgtypeslib의 errno 값

PGTYPES_NUM_BAD_NUMERIC

인수는 숫자 변수를 포함해야 합니다(또는 숫자 변수) 그러나 실제로는 메모리 내 표현이 유효하지 않은.

PGTYPES_NUM_OVERFLOW

오버플로가 발생했습니다. 숫자 유형이 처리할 수 있기 때문에 거의 임의의 정밀도, 숫자 변수를 다음으로 변환 다른 유형은 오버플로를 일으킬 수 있습니다.

PGTYPES_NUM_UNDERFLOW

언더플로가 발생했습니다. 숫자 유형이 처리할 수 있기 때문에 거의 임의의 정밀도, 숫자 변수를 다음으로 변환 다른 유형에서는 언더플로가 발생할 수 있습니다.

PGTYPES_NUM_DIVIDE_ZERO

0으로 나누기가 시도되었습니다.

PGTYPES_DATE_BAD_DATE

잘못된 날짜 문자열이 다음으로 전달되었습니다.PGTYPESdate_from_asc함수.

PGTYPES_DATE_ERR_EARGS

잘못된 인수가 전달되었습니다.PGTYPESdate_defmt_asc함수.

PGTYPES_DATE_ERR_ENOSHORTDATE

다음에 의해 입력 문자열에서 유효하지 않은 토큰이 발견되었습니다.PGTYPESdate_defmt_asc함수.

PGTYPES_INTVL_BAD_INTERVAL

잘못된 간격 문자열이 다음으로 전달되었습니다.PGTYPESinterval_from_asc함수 또는 유효하지 않은 간격 값이에 전달되었습니다.PGTYPESinterval_to_asc함수.

PGTYPES_DATE_ERR_ENOTDMY

다음의 일/월/년 지정이 일치하지 않습니다.PGTYPESdate_defmt_asc함수.

PGTYPES_DATE_BAD_DAY

다음에서 잘못된 월 값이 발견되었습니다.PGTYPESdate_defmt_asc함수.

PGTYPES_DATE_BAD_MONTH

잘못된 월 값이 다음에서 발견되었습니다.PGTYPESdate_defmt_asc함수.

PGTYPES_TS_BAD_TIMESTAMP

잘못된 타임스탬프 문자열 패스가 다음으로 전달되었습니다.PGTYPEStimestamp_from_asc함수 또는 유효하지 않은 타임스탬프 값이에 전달되었습니다.PGTYPEStimestamp_to_asc함수.

PGTYPES_TS_ERR_EINFTIME

다음 컨텍스트에서 무한 타임스탬프 값이 발견되었습니다. 처리할 수 없습니다.

33.6.8. 특수 상수 pgtypeslib

PGTYPESInvalidTimestamp

잘못된 타임스탬프를 나타내는 타임스탬프 유형의 값. 이는 함수에 의해 반환됩니다.PGTYPEStimestamp_from_asc구문 분석 오류가 발생했습니다. 메모 그 내부 표현으로 인해타임스탬프데이터 유형,PGTYPESInvalidTimestamp또한 유효한 타임스탬프입니다. 동시. 로 설정되어 있습니다.1899-12-31 23:59:59. 오류를 감지하려면 애플리케이션은 테스트만 하는 것이 아닙니다.PGTYPESInvalidTimestamp그러나 또한errno != 0각 호출 후PGTYPEStimestamp_from_asc.