이 문서는 지원되지 않는 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);
무료(아웃);

33.6.1. 젠 토토 유형

젠 토토 유형은 임의의 값으로 계산을 수행하는 기능을 제공합니다. 정밀도. 참조PostgreSQL : 문서 : 9.1 : 토토 핫 유형에 해당하는 유형에 대한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십진수, 반올림 포함 필요한 경우 적용됩니다.

PGTYPESnumeric_add

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

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

함수는 변수를 추가합니다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, 오류가 발생하면 -1입니다.

PGTYPESnumeric_div

두 개의 숫자 변수를 나누고 결과를 다음으로 반환합니다. 세 번째.

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

함수는 변수를 나눕니다.var1byvar2. 는 작업 결과는 변수에 저장됩니다.결과. 이 함수는 0을 반환합니다. 성공하면 -1, 오류가 발생하면 -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

젠 토토 유형의 변수를 long으로 변환합니다.

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

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

PGTYPESnumeric_to_decimal

젠 토토 유형의 변수를 십진수로 변환합니다.

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

이 함수는 숫자 값을 다음에서 변환합니다. 변수 그src다음을 가리킨다 10진수 변수는dst을 가리킵니다. 성공하면 0을, 오류이면 -1을 반환합니다. 오버플로를 포함하여 발생합니다. 오버플로 시 전역 변수errno다음으로 설정됩니다PGTYPES_NUM_OVERFLOW추가로.

PGTYPESnumeric_from_decimal

10진수 유형의 변수를 젠 토토로 변환합니다.

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

이 함수는 십진수 값을 변환합니다. 변수 그src다음을 가리킵니다. 숫자 변수dst을 가리킵니다. 성공하면 0을, 오류이면 -1을 반환합니다. 발생합니다. 10진수 유형은 다음과 같이 구현되므로 숫자 유형의 제한된 버전, 오버플로는 불가능합니다. 이 전환으로 발생합니다.

33.6.2. 날짜 유형

C의 날짜 유형을 사용하면 프로그램에서 데이터를 처리할 수 있습니다. SQL 유형 날짜입니다. 참조섹션 8.5동등한 경우 를 입력하세요.포스트그레SQL서버.

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

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. 안전하게 설정할 수 있습니다endptr에 NULL.

함수는 항상 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 1월 18일 1999
01/02/03 2월 1일 2003
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; 1월 8일 1999
990108 ISO 8601; 1월 8일 1999
1999.008 년 및 일 연도
J2451187 율리우스력의 날
99년 1월 8일 기원전 공통 전 99년 시대
PGTYPESdate_to_asc

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

char *PGTYPESdate_to_asc(날짜 dDate);

함수는 날짜를 받습니다.d날짜유일한 매개변수입니다. 그럴 것이다 날짜를 형식으로 출력합니다.1999-01-18, 즉,YYYY-MM-DD형식.

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- 수 연도를 두 자리 젠 토토로 표시합니다.

  • yyyy- 수 연도를 4자리 젠 토토로 표시합니다.

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

  • - 이름 월(약어).

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

표 33-3몇 가지 가능한 형식을 나타냅니다. 이 이 기능을 사용하는 방법에 대한 아이디어를 제공할 것입니다. 모두 출력 라인은 동일한 날짜인 11월 23일을 기준으로 합니다. 1959.

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

형식 결과
mmddyy 112359
ddmmy 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 11월 23일 월요일 1959
(ddd) 음. dd, yyyy (월) 11월 23일 1959
PGTYPESdate_defmt_asc

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

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

함수는 날짜 값에 대한 포인터를 받습니다. 작업 결과를 보유해야 합니다(d), 구문 분석에 사용할 형식 마스크 날짜(fmt) 및 C 문자* 날짜의 텍스트 표현을 포함하는 문자열 (str). 텍스트 표현은 형식 마스크와 일치해야 합니다. 그러나 1:1 매핑이 필요하지는 않습니다. 형식 마스크에 문자열을 추가합니다. 이 기능은 다음을 분석합니다. 순차적으로 리터럴을 찾습니다.yy또는yyyy그것 올해의 위치를 나타냅니다.mm월의 위치를 나타냄 그리고dd위치를 나타냄 오늘의.

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

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

형식 문자열 결과
ddmmyy 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 내가 28일에 말했어요 2525년 7월 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.3. 타임스탬프 유형

C의 타임스탬프 유형을 사용하면 프로그램에서 다음을 처리할 수 있습니다. SQL 유형 타임스탬프의 데이터입니다. 참조섹션 8.5동등한 경우 를 입력하세요.PostgreSQL서버.

다음 기능을 사용하여 작업할 수 있습니다. 타임스탬프 유형:

PGTYPEStimestamp_from_asc

텍스트 표현에서 타임스탬프를 다음으로 구문 분석합니다. 타임스탬프 변수입니다.

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

함수는 구문 분석할 문자열을 수신합니다(str) 및 C 문자에 대한 포인터* (endptr). 현재 ECPG 항상 전체 문자열을 구문 분석하므로 현재 첫 번째 주소 저장을 지원하지 않습니다. 잘못된 문자입니다.*endptr. 안전하게 설정할 수 있습니다endptr에 NULL.

이 함수는 성공 시 구문 분석된 타임스탬프를 반환합니다. 오류 발생 시,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 태평양 표준시 1999-01-08 04:05:06
1999년 1월 8일 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유일한 인수로 사용하고 다음을 반환합니다. 텍스트 표현을 포함하는 할당된 문자열 타임스탬프의.

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- 다음으로 대체됩니다. 해당 월의 일을 10진수(01-31)로 표시합니다.

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

    추가로%OB대체 월 이름을 나타내기 위해 구현됨 (날짜를 언급하지 않고 독립형으로 사용됨).

  • %e- 다음으로 대체됩니다. 월의 일을 십진수(1-31)로 표시합니다. 싱글 숫자 앞에는 공백이 있습니다.

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

  • %G- 다음으로 대체됩니다. 연도를 세기와 함께 십진수로 표시합니다. 올해는 일주일의 대부분을 포함하는 것 (월요일이 한 주의 첫날임).

  • %g- 다음으로 대체됩니다. 와 같은 해%G하지만 세기가 없는 십진수(00-99).

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

  • %h-와 동일%b.

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

  • %j- 다음으로 대체됩니다. 10진수(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- 다음으로 대체됩니다. Epoch 이후의 초 수, UTC.

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

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

  • %U- 다음으로 대체됩니다. 해당 연도의 주 수(일요일을 첫 번째 날로 함) 주)을 십진수(00-53)로 표시합니다.

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

  • %V- 다음으로 대체됩니다. 해당 연도의 주 수(월요일을 첫 번째 날로 함) 주)를 10진수(01-53)로 표시합니다. 만약 주 1월 1일을 포함하는 새 날짜는 4일 이상입니다. 1년이면 1주차입니다. 그렇지 않으면 마지막이다 전년도의 주이고 다음 주가 주입니다. 1.

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

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

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

  • %X- 다음으로 대체됩니다. 당시의 국가 대표.

  • %x-는 다음으로 대체됩니다. 날짜의 국가적 표현입니다.

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

  • %y- 다음으로 대체됩니다. 세기를 제외한 연도를 십진수(00-99)로 표시합니다.

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

  • %z- 다음으로 대체됩니다. UTC로부터의 시간대 오프셋; 앞에 더하기 기호가 표시됩니다. UTC 동쪽의 경우 UTC 서쪽의 경우 빼기 기호(시간) 분 뒤에는 각각 두 자리 숫자가 표시되고 아니오가 표시됩니다. 둘 사이의 구분 기호(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);

함수는 간격 변수를 뺍니다.스팬다음을 가리킵니다. 타임스탬프 변수 해당주석다음 변수를 가리키고 결과를 저장합니다.터우트다음을 가리킨다.

성공하면 함수는 0과 음수를 반환합니다. 오류가 발생한 경우 값입니다.

33.6.4. 간격 유형

C의 간격 유형을 사용하면 프로그램에서 다음을 처리할 수 있습니다. SQL 유형 간격의 데이터입니다. 참조섹션 8.5동등한 경우 를 입력하세요.포스트그레SQL서버.

다음 기능을 사용하여 작업할 수 있습니다. 간격 유형:

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초.

PGTYPESinterval_copy

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

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

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

33.6.5. 십진수 유형

십진수 유형은 숫자 유형과 유사합니다. 그러나 그것은 최대 정밀도는 유효 숫자 30자리로 제한됩니다. 에서 힙에 생성될 수 있는 숫자 유형과 대조 단, 10진수 유형은 스택이나 스택에서 생성될 수 있습니다. 힙(함수를 통해)PGTYPESdecimal_new그리고PGTYPESdecimal_free). 많이있다 에서 소수 유형을 처리하는 다른 함수인포믹스호환성 모드 설명됨메이저 토토 사이트 PostgreSQL.

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

PGTYPESdecimal_new

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

십진수 *PGTYPESdecimal_new(void);
PGTYPESdecimal_free

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

void PGTYPESdecimal_free(십진수 *var);

33.6.6. errno 값 pgtypeslib

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.7. 특수 상수 pgtypeslib

PGTYPESInvalidTimestamp

잘못된 시간을 나타내는 타임스탬프 유형의 값 스탬프. 이는 함수에 의해 반환됩니다.PGTYPEStimestamp_from_asc분석 중 오류. 내부 표현으로 인해타임스탬프데이터 유형,PGTYPESInvalidTimestamp또한 유효합니다. 동시에 타임스탬프를 찍습니다. 로 설정되어 있습니다.1899-12-31 23:59:59. 감지하기 위해서는 오류가 발생하면 응용프로그램이 오류가 발생하지 않는지 확인하세요. 테스트하다PGTYPESInvalidTimestamp그러나 또한errno != 0이후 각 호출PGTYPEStimestamp_from_asc.