34.6. ÐиблиоÑека pgtypes
ÐиблиоÑека pgtypes ÑопоÑÑавлÑÐµÑ ÑÐ¸Ð¿Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Postgres Pro Ñ Ð¸Ñ ÑквиваленÑами в C, коÑоÑÑе можно иÑполÑзоваÑÑ Ð² пÑогÑÐ°Ð¼Ð¼Ð°Ñ Ð½Ð° C. Ðна Ñакже пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ ÑÑнкÑии Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑÑ Ð²ÑÑиÑлений Ñ ÑÑими Ñипами в C, Ñо еÑÑÑ Ð±ÐµÐ· помоÑи ÑеÑвеÑа Postgres Pro. РаÑÑмоÑÑиÑе ÑледÑÑÑий пÑимеÑ:
EXEC SQL BEGIN DECLARE SECTION;
date date1;
timestamp ts1, tsout;
interval iv1;
char *out;
EXEC SQL END DECLARE SECTION;
PGTYPESdate_today(&date1);
EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
out = PGTYPEStimestamp_to_asc(&tsout);
printf("Started + duration: %s\n", out);
PGTYPESchar_free(out);
34.6.1. СимволÑнÑе ÑÑÑоки
ÐекоÑоÑÑе ÑÑнкÑии, в ÑаÑÑноÑÑи PGTYPESnumeric_to_asc, возвÑаÑаÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÐ¾ÐºÑ Ð² вÑделенной Ð´Ð»Ñ Ð½ÐµÑ Ð¿Ð°Ð¼ÑÑи. ÐÑ
ÑезÑлÑÑаÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾ÑвобождаÑÑÑÑ ÑÑнкÑией PGTYPESchar_free, а не free. (ÐÑо важно ÑолÑко в Windows, где вÑделение и оÑвобождение памÑÑи в опÑеделÑннÑÑ
ÑлÑÑаÑÑ
должно пÑоизводиÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ библиоÑекой.)
34.6.2. Тип numeric
Тип numeric позволÑÐµÑ Ð¿ÑоизводиÑÑ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ñ Ð¿ÑоизволÑной ÑоÑноÑÑÑÑ. ÐквиваленÑнÑй ÐµÐ¼Ñ Ñип на ÑеÑвеÑе Postgres Pro опиÑан в Разделе 8.1. ÐÐ²Ð¸Ð´Ñ Ñого, ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð¼ÐµÐµÑ Ð¿ÑоизволÑнÑÑ ÑоÑноÑÑÑ, она должна ÑаÑÑиÑÑÑÑÑÑ Ð¸ ÑжимаÑÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки. ÐоÑÑÐ¾Ð¼Ñ Ñакие пеÑеменнÑе можно ÑоздаваÑÑ ÑолÑко в облаÑÑи кÑÑи, иÑполÑзÑÑ ÑÑнкÑии PGTYPESnumeric_new и PGTYPESnumeric_free. Тип decimal подобен numeric, но Ð¸Ð¼ÐµÐµÑ Ð¾Ð³ÑаниÑеннÑÑ ÑоÑноÑÑÑ, и поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ ÑазмеÑаÑÑÑÑ Ð¸ в облаÑÑи кÑÑи, и в ÑÑеке.
ÐÐ»Ñ ÑабоÑÑ Ñ Ñипом numeric можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии:
PGTYPESnumeric_newÐапÑаÑÐ¸Ð²Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° новÑÑ Ð¿ÐµÑеменнÑÑ, ÑазмеÑÑннÑÑ Ð² памÑÑи.
numeric *PGTYPESnumeric_new(void);
PGTYPESnumeric_freeÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа numeric, вÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°Ñ Ð²ÑÑ ÐµÑ Ð¿Ð°Ð¼ÑÑÑ.
void PGTYPESnumeric_free(numeric *var);
PGTYPESnumeric_from_ascРазбиÑÐ°ÐµÑ ÑиÑловой Ñип из ÑÑÑоковой запиÑи.
numeric *PGTYPESnumeric_from_asc(char *str, char **endptr);
ÐопÑÑкаÑÑÑÑ Ð² ÑаÑÑноÑÑи ÑледÑÑÑие ÑоÑмаÑÑ:
-2,.794,+3.44,592.49E07и-32.84e-4. ÐÑли знаÑение ÑдаÑÑÑÑ ÑазобÑаÑÑ ÑÑпеÑно, возвÑаÑаеÑÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑй ÑказаÑелÑ, в пÑоÑивном ÑлÑÑае ÑказаÑÐµÐ»Ñ NULL. Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ECPG вÑегда ÑазбиÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð´Ð¾ конÑа, Ñак ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð°Ð´ÑÐµÑ Ð¿ÐµÑвого недопÑÑÑимого Ñимвола в*endptr. ÐоÑÑÐ¾Ð¼Ñ Ð²endptrÑвободно можно пеÑедаÑÑ NULL.PGTYPESnumeric_to_ascÐозвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑокÑ, вÑделеннÑÑ ÑÑнкÑией
mallocи ÑодеÑжаÑÑÑ ÑÑÑоковое пÑедÑÑавление знаÑениÑnumÑиÑлового Ñипа.char *PGTYPESnumeric_to_asc(numeric *num, int dscale);
ЧиÑловое знаÑение бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в
dscaleколиÑеÑÑвом ÑиÑÑ Ð¿Ð¾Ñле запÑÑой, окÑÑглÑнное пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. РезÑлÑÑÐ°Ñ Ð½Ñжно оÑвободиÑÑ ÑÑнкÑиейPGTYPESchar_free().PGTYPESnumeric_addСÑммиÑÑÐµÑ Ð´Ð²Ðµ ÑиÑловÑе пеÑеменнÑе и возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² ÑÑеÑÑей.
int PGTYPESnumeric_add(numeric *var1, numeric *var2, numeric *result);
ÐÑа ÑÑнкÑÐ¸Ñ ÑÑммиÑÑÐµÑ Ð¿ÐµÑеменнÑе
var1иvar2в ÑезÑлÑÑиÑÑÑÑÑÑ Ð¿ÐµÑеменнÑÑresult. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_subÐÑÑиÑлÑÐµÑ ÑазноÑÑÑ Ð´Ð²ÑÑ ÑиÑловÑÑ Ð¿ÐµÑеменнÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² ÑÑеÑÑей.
int PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result);
ÐÑа ÑÑнкÑÐ¸Ñ Ð²ÑÑиÑÐ°ÐµÑ Ð¿ÐµÑеменнÑÑ
var2изvar1. РезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии помеÑаеÑÑÑ Ð² пеÑеменнÑÑresult. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_mulÐеÑÐµÐ¼Ð½Ð¾Ð¶Ð°ÐµÑ Ð´Ð²Ðµ ÑиÑловÑе пеÑеменнÑе и возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² ÑÑеÑÑей.
int PGTYPESnumeric_mul(numeric *var1, numeric *var2, numeric *result);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÐµÑÐµÐ¼Ð½Ð¾Ð¶Ð°ÐµÑ Ð¿ÐµÑеменнÑе
var1иvar2. РезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии ÑÐ¾Ñ ÑанÑеÑÑÑ Ð² пеÑеменнойresult. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_divÐÑÑиÑлÑÐµÑ ÑаÑÑное двÑÑ ÑиÑловÑÑ Ð¿ÐµÑеменнÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² ÑÑеÑÑей.
int PGTYPESnumeric_div(numeric *var1, numeric *var2, numeric *result);
ÐÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ»Ð¸Ñ Ð¿ÐµÑеменнÑÑ
var1наvar2. РезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии ÑÐ¾Ñ ÑанÑеÑÑÑ Ð² пеÑеменнойresult. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_cmpСÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ð´Ð²Ðµ ÑиÑловÑе пеÑеменнÑе.
int PGTYPESnumeric_cmp(numeric *var1, numeric *var2)
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑÑавнение двÑÑ ÑиÑловÑÑ Ð¿ÐµÑеменнÑÑ . ÐÑи оÑибке возвÑаÑаеÑÑÑ
INT_MAX. Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ из ÑÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ Ð·Ð½Ð°Ñений:1, еÑли
var1болÑÑеvar2-1, еÑли
var1менÑÑеvar20, еÑли
var1иvar2ÑавнÑ
PGTYPESnumeric_from_intÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ int в пеÑеменнÑÑ numeric.
int PGTYPESnumeric_from_int(signed int int_val, numeric *var);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑелоÑиÑленнÑÑ Ð¿ÐµÑеменнÑÑ Ñо знаком Ñипа signed int и ÑÐ¾Ñ ÑанÑÐµÑ ÐµÑ Ð·Ð½Ð°Ñение в пеÑеменной
varÑипа numeric. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_from_longÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ long int в пеÑеменнÑÑ numeric.
int PGTYPESnumeric_from_long(signed long int long_val, numeric *var);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑелоÑиÑленнÑÑ Ð¿ÐµÑеменнÑÑ Ñо знаком Ñипа signed long int и ÑÐ¾Ñ ÑанÑÐµÑ ÐµÑ Ð·Ð½Ð°Ñение в пеÑеменной
varÑипа numeric. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_copyÐопиÑÑÐµÑ Ð¾Ð´Ð½Ñ ÑиÑловÑÑ Ð¿ÐµÑеменнÑÑ Ð² дÑÑгÑÑ.
int PGTYPESnumeric_copy(numeric *src, numeric *dst);
ÐÑа ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑÐµÑ Ð·Ð½Ð°Ñение пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
src, в пеÑеменнÑÑ, на коÑоÑÑÑ ÑказÑваеÑdst. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_from_doubleÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа double в пеÑеменнÑÑ numeric.
int PGTYPESnumeric_from_double(double d, numeric *dst);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа double и ÑÐ¾Ñ ÑанÑÐµÑ Ð¿ÑеобÑазованное знаÑение в пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
dst. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке.PGTYPESnumeric_to_doubleÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа numeric в пеÑеменнÑÑ double.
int PGTYPESnumeric_to_double(numeric *nv, double *dp)
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение Ñипа numeric пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
nv, в пеÑеменнÑÑ Ñипа double, на коÑоÑÑÑ ÑказÑваеÑdp. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке, в Ñом ÑиÑле пÑи пеÑеполнении. ÐÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеполнение, в глобалÑной пеÑеменнойerrnoдополниÑелÑно ÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°ÑениеPGTYPES_NUM_OVERFLOW.PGTYPESnumeric_to_intÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа numeric в пеÑеменнÑÑ int.
int PGTYPESnumeric_to_int(numeric *nv, int *ip);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение Ñипа numeric пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
nv, в ÑелоÑиÑленнÑÑ Ð¿ÐµÑеменнÑÑ, на коÑоÑÑÑ ÑказÑваеÑip. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке, в Ñом ÑиÑле пÑи пеÑеполнении. ÐÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеполнение, в глобалÑной пеÑеменнойerrnoдополниÑелÑно ÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°ÑениеPGTYPES_NUM_OVERFLOW.PGTYPESnumeric_to_longÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа numeric в пеÑеменнÑÑ long.
int PGTYPESnumeric_to_long(numeric *nv, long *lp);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение Ñипа numeric пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
nv, в ÑелоÑиÑленнÑÑ Ð¿ÐµÑеменнÑÑ Ñипа long, на коÑоÑÑÑ ÑказÑваеÑlp. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке, в Ñом ÑиÑле пÑи пеÑеполнении. ÐÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеполнение, в глобалÑной пеÑеменнойerrnoдополниÑелÑно ÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°ÑениеPGTYPES_NUM_OVERFLOW.PGTYPESnumeric_to_decimalÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа numeric в пеÑеменнÑÑ decimal.
int PGTYPESnumeric_to_decimal(numeric *src, decimal *dst);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение Ñипа numeric пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
src, в пеÑеменнÑÑ Ñипа decimal, на коÑоÑÑÑ ÑказÑваеÑdst. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке, в Ñом ÑиÑле пÑи пеÑеполнении. ÐÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеполнение, в глобалÑной пеÑеменнойerrnoдополниÑелÑно ÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°ÑениеPGTYPES_NUM_OVERFLOW.PGTYPESnumeric_from_decimalÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа decimal в пеÑеменнÑÑ numeric.
int PGTYPESnumeric_from_decimal(decimal *src, numeric *dst);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение Ñипа decimal пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑ
src, в пеÑеменнÑÑ Ñипа numeric, на коÑоÑÑÑ ÑказÑваеÑdst. Ðна возвÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° и -1 пÑи оÑибке. Так как Ñип decimal Ñеализован как огÑаниÑÐµÐ½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ñипа numeric, пÑи Ñаком пÑеобÑазовании пеÑеполнение невозможно.
34.6.3. Тип date
Тип date, ÑеализованнÑй в C, позволÑÐµÑ Ð¿ÑогÑаммам ÑабоÑаÑÑ Ñ Ð´Ð°Ð½Ð½Ñми Ñипа date в SQL. СооÑвеÑÑÑвÑÑÑий Ñип ÑеÑвеÑа Postgres Pro опиÑан в Разделе 8.5.
ÐÐ»Ñ ÑабоÑÑ Ñ Ñипом date можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии:
PGTYPESdate_from_timestampÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ ÑаÑÑÑ Ð´Ð°ÑÑ Ð¸Ð· знаÑÐµÐ½Ð¸Ñ Ñипа timestamp.
date PGTYPESdate_from_timestamp(timestamp dt);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð² единÑÑвенном аÑгÑменÑе знаÑение вÑемени Ñипа timestamp и возвÑаÑÐ°ÐµÑ Ð¸Ð·Ð²Ð»ÐµÑÑннÑÑ Ð¸Ð· него даÑÑ.
PGTYPESdate_from_ascРазбиÑÐ°ÐµÑ Ð´Ð°ÑÑ Ð¸Ð· ÐµÑ ÑекÑÑового пÑедÑÑавлениÑ.
date PGTYPESdate_from_asc(char *str, char **endptr);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ C char*
strи ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÐ¾ÐºÑ C char*endptr. Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ECPG вÑегда ÑазбиÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð´Ð¾ конÑа, Ñак ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð°Ð´ÑÐµÑ Ð¿ÐµÑвого недопÑÑÑимого Ñимвола в*endptr. ÐоÑÑÐ¾Ð¼Ñ Ð²endptrÑвободно можно пеÑедаÑÑ NULL.ÐамеÑÑÑе, ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ñегда подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ ÑоÑÐ¼Ð°Ñ Ð´Ð°Ñ MDY (меÑÑÑ-денÑ-год) и никакой пеÑеменной Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑого ÑоÑмаÑа в ECPG неÑ.
ÐÑе допÑÑÑимÑе ÑоÑмаÑÑ Ð²Ð²Ð¾Ð´Ð° пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 34.2.
ТаблиÑа 34.2. ÐопÑÑÑимÑе ÑоÑмаÑÑ Ð²Ð²Ð¾Ð´Ð° длÑ
PGTYPESdate_from_ascÐвод РезÑлÑÑÐ°Ñ January 8, 1999January 8, 19991999-01-08January 8, 19991/8/1999January 8, 19991/18/1999January 18, 199901/02/03February 1, 20031999-Jan-08January 8, 1999Jan-08-1999January 8, 199908-Jan-1999January 8, 199999-Jan-08January 8, 199908-Jan-99January 8, 199908-Jan-06January 8, 2006Jan-08-99January 8, 199919990108ISO 8601; January 8, 1999990108ISO 8601; January 8, 19991999.008год и Ð´ÐµÐ½Ñ Ð³Ð¾Ð´Ð°J2451187ЮлианÑкий денÑJanuary 8, 99 BC99 год до наÑей ÑÑÑPGTYPESdate_to_ascÐозвÑаÑÐ°ÐµÑ ÑекÑÑовое пÑедÑÑавление пеÑеменной Ñипа date.
char *PGTYPESdate_to_asc(date dDate);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð² каÑеÑÑве единÑÑвенного паÑамеÑÑа даÑÑ
dDateи вÑÐ²Ð¾Ð´Ð¸Ñ ÐµÑ Ð² виде1999-01-18, Ñо еÑÑÑ Ð² ÑоÑмаÑеYYYY-MM-DD. РезÑлÑÑÐ°Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑвободиÑÑ ÑÑнкÑиейPGTYPESchar_free().PGTYPESdate_julmdyÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð½Ñ, меÑÑÑа и года из пеÑеменной Ñипа date.
void PGTYPESdate_julmdy(date d, int *mdy);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð´Ð°ÑÑ
dи ÑказаÑÐµÐ»Ñ Ð½Ð° 3 ÑелоÑиÑленнÑÑ Ð·Ð½Ð°ÑениÑmdy. ÐÐ¼Ñ Ð¿ÐµÑеменной ÑказÑÐ²Ð°ÐµÑ Ð½Ð° поÑÑдок знаÑений: вmdy[0]запиÑÑваеÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа, вmdy[1]â Ð½Ð¾Ð¼ÐµÑ Ð´Ð½Ñ, а вmdy[2]â год.PGTYPESdate_mdyjulÐбÑазÑÐµÑ Ð·Ð½Ð°Ñение даÑÑ Ð¸Ð· маÑÑива 3 ÑелÑÑ ÑиÑел, задаÑÑÐ¸Ñ Ð´ÐµÐ½Ñ, меÑÑÑ Ð¸ год даÑÑ.
void PGTYPESdate_mdyjul(int *mdy, date *jdate);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð² пеÑвом аÑгÑменÑе маÑÑив из 3 ÑелÑÑ ÑиÑел (
mdy), а во вÑоÑом ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа date, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.PGTYPESdate_dayofweekÐозвÑаÑÐ°ÐµÑ ÑиÑло, пÑедÑÑавлÑÑÑее Ð´ÐµÐ½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ даÑÑ.
int PGTYPESdate_dayofweek(date d);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² единÑÑвенном аÑгÑменÑе пеÑеменнÑÑ
dÑипа date и возвÑаÑÐ°ÐµÑ Ñелое ÑиÑло, вÑÑажаÑÑее Ð´ÐµÐ½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ Ð´Ð»Ñ ÑÑой даÑÑ.0 â ÐоÑкÑеÑенÑе
1 â ÐонеделÑник
2 â ÐÑоÑник
3 â СÑеда
4 â ЧеÑвеÑг
5 â ÐÑÑниÑа
6 â СÑббоÑа
PGTYPESdate_todayÐÑдаÑÑ ÑекÑÑÑÑ Ð´Ð°ÑÑ.
void PGTYPESdate_today(date *d);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ (
d) Ñипа date, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñана ÑекÑÑÐ°Ñ Ð´Ð°Ñа.PGTYPESdate_fmt_ascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа date в ÑекÑÑовое пÑедÑÑавление по маÑке ÑоÑмаÑа.
int PGTYPESdate_fmt_asc(date dDate, char *fmtstring, char *outbuf);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð°ÑÑ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ (
dDate), маÑÐºÑ ÑоÑмаÑа (fmtstring) и ÑÑÑокÑ, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑено ÑекÑÑовое пÑедÑÑавление даÑÑ (outbuf).Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
Ð ÑÑÑоке ÑоÑмаÑа можно иÑполÑзоваÑÑ ÑледÑÑÑие ÐºÐ¾Ð´Ñ Ð¿Ð¾Ð»ÐµÐ¹:
ddâ ÐÐ¾Ð¼ÐµÑ Ð´Ð½Ñ Ð² меÑÑÑе.mmâ ÐÐ¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа в годÑ.yyâ ÐÐ¾Ð¼ÐµÑ Ð³Ð¾Ð´Ð° в виде двÑÑ ÑиÑÑ.yyyyâ ÐÐ¾Ð¼ÐµÑ Ð³Ð¾Ð´Ð° в виде ÑеÑÑÑÑÑ ÑиÑÑ.dddâ Ðазвание Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ (ÑокÑаÑÑнное).mmmâ Ðазвание меÑÑÑа (ÑокÑаÑÑнное).
ÐÑе дÑÑгие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÐºÐ¾Ð¿Ð¸ÑÑÑÑÑÑ Ð² вÑводимÑÑ ÑÑÑÐ¾ÐºÑ 1:1.
РТаблиÑе 34.3 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко возможнÑÑ ÑоÑмаÑов. ÐÑо даÑÑ Ð¿ÑедÑÑавление, как можно иÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ. ÐÑе ÑÑÑоки вÑвода Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ даÑÑ: 23 ноÑбÑÑ 1959 г.
ТаблиÑа 34.3. ÐопÑÑÑимÑе ÑоÑмаÑÑ Ð²Ð²Ð¾Ð´Ð° длÑ
PGTYPESdate_fmt_ascФоÑÐ¼Ð°Ñ Ð ÐµÐ·ÑлÑÑÐ°Ñ mmddyy112359ddmmyy231159yymmdd591123yy/mm/dd59/11/23yy mm dd59 11 23yy.mm.dd59.11.23.mm.yyyy.dd..11.1959.23.mmm. dd, yyyyNov. 23, 1959mmm dd yyyyNov 23 1959yyyy dd mm1959 23 11ddd, mmm. dd, yyyyMon, Nov. 23, 1959(ddd) mmm. dd, yyyy(Mon) Nov. 23, 1959PGTYPESdate_defmt_ascÐÑеобÑазÑÐµÑ ÑÑÑÐ¾ÐºÑ C
char*в знаÑение Ñипа date по маÑке ÑоÑмаÑа.int PGTYPESdate_defmt_asc(date *d, char *fmt, char *str);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа date (
d), в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии, маÑÐºÑ ÑоÑмаÑа Ð´Ð»Ñ ÑазбоÑа даÑÑ (fmt) и ÑÑÑÐ¾ÐºÑ C char*, ÑодеÑжаÑÑÑ ÑекÑÑовое пÑедÑÑавление даÑÑ (str). ÐжидаеÑÑÑ, ÑÑо ÑекÑÑовое пÑедÑÑавление бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð¼Ð°Ñке ÑоÑмаÑа. Ðднако ÑÑо ÑооÑвеÑÑÑвие не обÑзаÑелÑно должно бÑÑÑ ÑоÑнÑм. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑÐµÑ ÑолÑко поÑÑдок ÑлеменÑов и иÑÐµÑ Ð² нÑм подÑÑÑокиyyилиyyyy, обознаÑаÑÑие позиÑÐ¸Ñ Ð³Ð¾Ð´Ð°, подÑÑÑокÑmm, обознаÑаÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¼ÐµÑÑÑа, иdd, обознаÑаÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð´Ð½Ñ.РТаблиÑа 34.4 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко возможнÑÑ ÑоÑмаÑов. ÐÑо даÑÑ Ð¿ÑедÑÑавление, как можно иÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ.
ТаблиÑа 34.4. ÐопÑÑÑимÑе ÑоÑмаÑÑ Ð²Ð²Ð¾Ð´Ð° длÑ
rdefmtdateФоÑÐ¼Ð°Ñ Ð¡ÑÑока РезÑлÑÑÐ°Ñ ddmmyy21-2-541954-02-21ddmmyy2-12-541954-12-02ddmmyy201119541954-11-20ddmmyy1304641964-04-13mmm.dd.yyyyMAR-12-19671967-03-12yy/mm/dd1954, February 3rd1954-02-03mmm.dd.yyyy0412691969-04-12yy/mm/ddIn the year 2525, in the month of July, mankind will be alive on the 28th day2525-07-28dd-mm-yyI said on the 28th of July in the year 25252525-07-28mmm.dd.yyyy9/14/581958-09-14yy/mm/dd47/03/291947-03-29mmm.dd.yyyyoct 28 19751975-10-28mmddyyNov 14th, 19851985-11-14
34.6.4. Тип timestamp
Тип timestamp, ÑеализованнÑй в C, позволÑÐµÑ Ð¿ÑогÑаммам ÑабоÑаÑÑ Ñ Ð´Ð°Ð½Ð½Ñми Ñипа timestamp в SQL. СооÑвеÑÑÑвÑÑÑий Ñип ÑеÑвеÑа Postgres Pro опиÑан в Разделе 8.5.
ÐÐ»Ñ ÑабоÑÑ Ñ Ñипом timestamp можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии:
PGTYPEStimestamp_from_ascРазбиÑÐ°ÐµÑ Ð·Ð½Ð°Ñение даÑÑ/вÑемени из ÑекÑÑового пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² пеÑеменнÑÑ Ñипа timestamp.
timestamp PGTYPEStimestamp_from_asc(char *str, char **endptr);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ (
str), коÑоÑÑÑ Ð½Ñжно ÑазобÑаÑÑ, и ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÐ¾ÐºÑ C char* (endptr). Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ECPG вÑегда ÑазбиÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð´Ð¾ конÑа, Ñак ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð°Ð´ÑÐµÑ Ð¿ÐµÑвого недопÑÑÑимого Ñимвола в*endptr. ÐоÑÑÐ¾Ð¼Ñ Ð²endptrÑвободно можно пеÑедаÑÑ NULL.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑазобÑанное вÑемÑ, а в ÑлÑÑае оÑибки возвÑаÑаеÑÑÑ
PGTYPESInvalidTimestampи вerrnoÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°ÑениеPGTYPES_TS_BAD_TIMESTAMP. См. замеÑание оÑноÑиÑелÑноPGTYPESInvalidTimestamp.ÐообÑе Ð²Ð²Ð¾Ð´Ð¸Ð¼Ð°Ñ ÑÑÑока Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð´Ð¾Ð¿ÑÑÑимое Ñказание даÑÑ, пÑобелÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸ допÑÑÑимое Ñказание вÑемени в лÑбом ÑоÑеÑании. ÐамеÑÑÑе, ÑÑо ÑаÑовÑе поÑÑа ECPG не поддеÑживаеÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑазобÑаÑÑ Ð¸Ñ , но не задейÑÑвÑÐµÑ Ð¸Ñ Ð² вÑÑиÑлениÑÑ ÐºÐ°Ðº ÑÑо делаеÑ, напÑимеÑ, ÑеÑÐ²ÐµÑ Postgres Pro. Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑаÑового поÑÑа во вводимой ÑÑÑоке пÑоÑÑо игноÑиÑÑÑÑÑÑ.
РТаблиÑа 34.5 пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð½ÐµÑколÑко пÑимеÑов вводимÑÑ ÑÑÑок.
ТаблиÑа 34.5. ÐопÑÑÑимÑе ÑоÑмаÑÑ Ð²Ð²Ð¾Ð´Ð° длÑ
PGTYPEStimestamp_from_ascÐвод РезÑлÑÑÐ°Ñ 1999-01-08 04:05:061999-01-08 04:05:06January 8 04:05:06 1999 PST1999-01-08 04:05:061999-Jan-08 04:05:06.789-81999-01-08 04:05:06.789 (Ñказание ÑаÑового поÑÑа игноÑиÑÑеÑÑÑ)J2451187 04:05-08:001999-01-08 04:05:00 (Ñказание ÑаÑового поÑÑа игноÑиÑÑеÑÑÑ)PGTYPEStimestamp_to_ascÐÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение даÑÑ Ð² ÑÑÑÐ¾ÐºÑ C char*.
char *PGTYPEStimestamp_to_asc(timestamp tstamp);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² каÑеÑÑве единÑÑвенного аÑгÑменÑа
tstampзнаÑение Ñипа timestamp и возвÑаÑÐ°ÐµÑ ÑазмеÑÑннÑÑ Ð² памÑÑи ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑекÑÑовое пÑедÑÑавление даÑÑ/вÑемени. РезÑлÑÑÐ°Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑвободиÑÑ ÑÑнкÑиейPGTYPESchar_free().PGTYPEStimestamp_currentÐолÑÑÐ°ÐµÑ ÑекÑÑее вÑемÑ.
void PGTYPEStimestamp_current(timestamp *ts);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑекÑÑее вÑÐµÐ¼Ñ Ð¸ ÑÐ¾Ñ ÑанÑÐµÑ ÐµÐ³Ð¾ в пеÑеменной Ñипа timestamp, на коÑоÑÑÑ ÑказÑваеÑ
ts.PGTYPEStimestamp_fmt_ascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа timestamp в ÑÑÑÐ¾ÐºÑ C char* по маÑке ÑоÑмаÑа.
int PGTYPEStimestamp_fmt_asc(timestamp *ts, char *output, int str_len, char *fmtstr);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
ts) ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа timestamp, а в поÑледÑÑÑÐ¸Ñ ÑказаÑÐµÐ»Ñ Ð½Ð° бÑÑÐµÑ Ð²Ñвода (output), макÑималÑнÑÑ Ð´Ð»Ð¸Ð½Ñ ÑÑÑоки, коÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ Ð±ÑÑÐµÑ (str_len), и маÑÐºÑ ÑоÑмаÑа, Ñ ÐºÐ¾ÑоÑой бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿ÑеобÑазование (fmtstr).Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
РмаÑке ÑоÑмаÑа можно иÑполÑзоваÑÑ ÐºÐ¾Ð´Ñ ÑоÑмаÑа, пеÑеÑиÑленнÑе ниже. ÐÑи же ÐºÐ¾Ð´Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑнкÑиÑ
strftimeиз библиоÑеки libc. ÐÑбÑе ÑимволÑ, не оÑноÑÑÑиеÑÑ Ðº кодам ÑоÑмаÑа, бÑдÑÑ Ð¿ÑоÑÑо ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð² бÑÑÐµÑ Ð²Ñвода.%Aâ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением полного Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸.%aâ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением ÑокÑаÑÑнного Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸.%Bâ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением полного Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑÑÑа.%bâ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением ÑокÑаÑÑнного Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑÑÑа.%Câ заменÑеÑÑÑ ÑÑолеÑием (год / 100) в виде деÑÑÑиÑного ÑиÑла; одиноÑÐ½Ð°Ñ ÑиÑÑа пÑедваÑÑеÑÑÑ Ð½ÑлÑм.%câ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением даÑÑ Ð¸ вÑемени.%Dâ ÑавнознаÑно%m/%d/%y.%dâ заменÑеÑÑÑ Ð´Ð½Ñм меÑÑÑа в виде деÑÑÑиÑного ÑиÑла (01-31).%E*%O*â ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸ POSIX. ÐоÑледоваÑелÑноÑÑи%Ec%EC%Ex%EX%Ey%EY%Od%Oe%OH%OI%Om%OM%OS%Ou%OU%OV%Ow%OW%OyÐ´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑводиÑÑ Ð°Ð»ÑÑеÑнаÑивнÑе пÑедÑÑавлениÑ.ÐÑоме Ñого, алÑÑеÑнаÑивнÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑÑÑев пÑедÑÑавлÑÐµÑ ÐºÐ¾Ð´ ÑоÑмаÑа
%OB(иÑполÑзÑеÑÑÑ Ð¾ÑделÑно, без ÑÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð´Ð½Ñ).%eâ заменÑеÑÑÑ Ð´Ð½Ñм в виде деÑÑÑиÑного ÑиÑла (1-31); одиноÑÐ½Ð°Ñ ÑиÑÑа пÑедваÑÑеÑÑÑ Ð¿Ñобелом.%Fâ ÑавнознаÑно%Y-%m-%d.%Gâ заменÑеÑÑÑ Ð³Ð¾Ð´Ð¾Ð¼ в виде деÑÑÑиÑного ÑиÑла (Ñо ÑÑолеÑием). ÐÑи ÑÑом годом ÑÑиÑаеÑÑÑ ÑоÑ, ÑÑо ÑодеÑÐ¶Ð¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ ÑаÑÑÑ Ð½ÐµÐ´ÐµÐ»Ð¸ (дни недели наÑинаÑÑÑÑ Ñ Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ñника).%gâ заменÑеÑÑÑ Ñем же годом, ÑÑо и%G, но в виде деÑÑÑиÑного ÑиÑла без ÑÑолеÑÐ¸Ñ (00-99).%Hâ заменÑеÑÑÑ ÑаÑами (в 24-ÑаÑовом ÑоÑмаÑе) в виде деÑÑÑиÑного ÑиÑла (00-23).%hâ ÑавнознаÑно%b.%Iâ заменÑеÑÑÑ ÑаÑами (в 12-ÑаÑовом ÑоÑмаÑе) в виде деÑÑÑиÑного ÑиÑла (01-12).%jâ заменÑеÑÑÑ Ð´Ð½Ñм года в виде деÑÑÑиÑного ÑиÑла (001-366).%kâ заменÑеÑÑÑ ÑаÑами (в 24-ÑаÑовом ÑоÑмаÑе) в виде деÑÑÑиÑного ÑиÑла (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).%Tâ ÑавнознаÑно%H:%M:%S%tâ заменÑеÑÑÑ Ñимволом ÑабÑлÑÑии.%Uâ заменÑеÑÑÑ Ð½Ð¾Ð¼ÐµÑом недели в Ð³Ð¾Ð´Ñ (пеÑвÑм днÑм недели ÑÑиÑаеÑÑÑ Ð²Ð¾ÑкÑеÑенÑе) в виде деÑÑÑиÑного ÑиÑла (00-53).%uâ заменÑеÑÑÑ Ð½Ð¾Ð¼ÐµÑом Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ (пеÑвÑм днÑм недели ÑÑиÑаеÑÑÑ Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ñник) в виде деÑÑÑиÑного ÑиÑла (1-7).%Vâ заменÑеÑÑÑ Ð½Ð¾Ð¼ÐµÑом недели в Ð³Ð¾Ð´Ñ (пеÑвÑм днÑм недели ÑÑиÑаеÑÑÑ Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ñник) в виде деÑÑÑиÑного ÑиÑла (01-53). ÐÑли к недели, вклÑÑаÑÑей 1 ÑнваÑÑ, оÑноÑÑÑÑÑ 4 или болÑÑе дней нового года, она ÑÑиÑаеÑÑÑ Ð½ÐµÐ´ÐµÐ»ÐµÐ¹ Ñ Ð½Ð¾Ð¼ÐµÑом 1; в пÑоÑивном ÑлÑÑае ÑÑо поÑледнÑÑ Ð½ÐµÐ´ÐµÐ»Ñ Ð¿ÑедÑдÑÑего года, а неделей под номеÑом 1 бÑÐ´ÐµÑ ÑледÑÑÑаÑ.%vâ ÑавнознаÑно%e-%b-%Y.%Wâ заменÑеÑÑÑ Ð½Ð¾Ð¼ÐµÑом недели в Ð³Ð¾Ð´Ñ (пеÑвÑм днÑм недели ÑÑиÑаеÑÑÑ Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ñник) в виде деÑÑÑиÑного ÑиÑла (00-53).%wâ заменÑеÑÑÑ Ð½Ð¾Ð¼ÐµÑом Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ (пеÑвÑм днÑм недели ÑÑиÑаеÑÑÑ Ð²Ð¾ÑкÑеÑенÑе) в виде деÑÑÑиÑного ÑиÑла (0-6).%Xâ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением вÑемени.%xâ заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением даÑÑ.%Yâ заменÑеÑÑÑ Ð³Ð¾Ð´Ð¾Ð¼ Ñо ÑÑолеÑием в виде деÑÑÑиÑного ÑиÑла.%yâ заменÑеÑÑÑ Ð³Ð¾Ð´Ð¾Ð¼ без ÑÑолеÑÐ¸Ñ Ð² виде деÑÑÑиÑного ÑиÑла (00-99).%Zâ заменÑеÑÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ ÑаÑового поÑÑа.%zâ заменÑеÑÑÑ ÑмеÑением ÑаÑового поÑÑа Ð¾Ñ UTC; ведÑÑий знак плÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐ°ÐµÑ ÑмеÑение к воÑÑÐ¾ÐºÑ Ð¾Ñ UTC, а знак минÑÑ â к западÑ, ÑаÑÑ Ð¸ минÑÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð°Ñами ÑиÑÑ Ð±ÐµÐ· ÑазделиÑÐµÐ»Ñ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸ (ÑÑа ÑоÑма ÑÑÑановлена Ð´Ð»Ñ Ð´Ð°ÑÑ Ð² RFC 822).%+â заменÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñм пÑедÑÑавлением даÑÑ Ð¸ вÑемени.%-*â ÑаÑÑиÑение GNU libc. ÐÑклÑÑÐ°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ ÑиÑел по ÑиÑине пÑи вÑводе.$_* â ÑаÑÑиÑение GNU libc. Явно вклÑÑÐ°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ пÑобелами.
%0*â ÑаÑÑиÑение GNU libc. Явно вклÑÑÐ°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ нÑлÑми.%%â заменÑеÑÑÑ Ñимволом%.
PGTYPEStimestamp_subÐÑÑиÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ знаÑение вÑемени из дÑÑгого и ÑÐ¾Ñ ÑанÑÐµÑ ÑезÑлÑÑÐ°Ñ Ð² пеÑеменной Ñипа interval.
int PGTYPEStimestamp_sub(timestamp *ts1, timestamp *ts2, interval *iv);
ÐÑа ÑÑнкÑÐ¸Ñ Ð²ÑÑиÑÐ°ÐµÑ Ð·Ð½Ð°Ñение Ñипа timestamp, на коÑоÑое ÑказÑваеÑ
ts2, из знаÑÐµÐ½Ð¸Ñ timestamp, на коÑоÑое ÑказÑваеÑts1, и ÑÐ¾Ñ ÑанÑÐµÑ ÑезÑлÑÑÐ°Ñ Ð² пеÑеменной Ñипа interval, на коÑоÑÑÑ ÑказÑваеÑiv.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
PGTYPEStimestamp_defmt_ascРазбиÑÐ°ÐµÑ Ð·Ð½Ð°Ñение Ñипа timestamp из ÑекÑÑового пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ маÑкой ÑоÑмаÑа.
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ÐобавлÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval к пеÑеменной Ñипа timestamp.
int PGTYPEStimestamp_add_interval(timestamp *tin, interval *span, timestamp *tout);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ
tinÑипа timestamp и ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑspanÑипа interval. Ðна добавлÑÐµÑ Ð²Ñеменной инÑеÑвал к знаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени и ÑÐ¾Ñ ÑанÑÐµÑ Ð¿Ð¾Ð»ÑÑеннÑÑ Ð´Ð°ÑÑ/вÑÐµÐ¼Ñ Ð² пеÑеменной Ñипа timestamp, на коÑоÑÑÑ ÑказÑваеÑtout.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
PGTYPEStimestamp_sub_intervalÐÑÑиÑÐ°ÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval из пеÑеменной Ñипа timestamp.
int PGTYPEStimestamp_sub_interval(timestamp *tin, interval *span, timestamp *tout);
ÐÑа ÑÑнкÑÐ¸Ñ Ð²ÑÑиÑÐ°ÐµÑ Ð·Ð½Ð°Ñение Ñипа interval, на коÑоÑое ÑказÑваеÑ
span, из знаÑÐµÐ½Ð¸Ñ Ñипа timestamp, на коÑоÑое ÑказÑваеÑtin, и ÑÐ¾Ñ ÑанÑÐµÑ ÑезÑлÑÑÐ°Ñ Ð² пеÑеменной, на коÑоÑÑÑ ÑказÑваеÑtout.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
34.6.5. Тип interval
Тип interval, ÑеализованнÑй в C, позволÑÐµÑ Ð¿ÑогÑаммам ÑабоÑаÑÑ Ñ Ð´Ð°Ð½Ð½Ñми Ñипа interval в SQL. СооÑвеÑÑÑвÑÑÑий Ñип ÑеÑвеÑа Postgres Pro опиÑан в Разделе 8.5.
ÐÐ»Ñ ÑабоÑÑ Ñ Ñипом interval можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии:
PGTYPESinterval_newÐозвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° новÑÑ Ð¿ÐµÑеменнÑÑ interval, ÑазмеÑÑннÑÑ Ð² памÑÑи.
interval *PGTYPESinterval_new(void);
PGTYPESinterval_freeÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¼ÐµÑÑо, занимаемое Ñанее ÑазмеÑÑнной в памÑÑи пеÑеменной Ñипа interval.
void PGTYPESinterval_free(interval *intvl);
PGTYPESinterval_from_ascРазбиÑÐ°ÐµÑ Ð·Ð½Ð°Ñение Ñипа interval из его ÑекÑÑового пÑедÑÑавлениÑ.
interval *PGTYPESinterval_from_asc(char *str, char **endptr);
ÐÑа ÑÑнкÑÐ¸Ñ ÑазбиÑÐ°ÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑÑÑокÑ
strи возвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑазмеÑÑннÑÑ Ð² памÑÑи пеÑеменнÑÑ Ñипа interval. Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ECPG вÑегда ÑазбиÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð´Ð¾ конÑа, Ñак ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð°Ð´ÑÐµÑ Ð¿ÐµÑвого недопÑÑÑимого Ñимвола в*endptr. ÐоÑÑÐ¾Ð¼Ñ Ð²endptrÑвободно можно пеÑедаÑÑ NULL.PGTYPESinterval_to_ascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval в ÑекÑÑовое пÑедÑÑавление.
char *PGTYPESinterval_to_asc(interval *span);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval, на коÑоÑÑÑ ÑказÑваеÑ
span, в ÑÑÑÐ¾ÐºÑ C char*. ÐÑ Ð²Ñвод вÑглÑÐ´Ð¸Ñ Ð¿ÑимеÑно Ñак:@ 1 day 12 hours 59 mins 10 secs. РезÑлÑÑÐ°Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑвободиÑÑ ÑÑнкÑиейPGTYPESchar_free().PGTYPESinterval_copyÐопиÑÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval.
int PGTYPESinterval_copy(interval *intvlsrc, interval *intvldest);
ÐÑа ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval, на коÑоÑÑÑ ÑказÑваеÑ
intvlsrc, в пеÑеменнÑÑ, на коÑоÑÑÑ ÑказÑваеÑintvldest. ÐамеÑÑÑе, ÑÑо Ð´Ð»Ñ Ñелевой пеÑеменной Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑедваÑиÑелÑно вÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ.
34.6.6. Тип decimal
Тип decimal поÑ
ож на Ñип numeric, однако его макÑималÑÐ½Ð°Ñ ÑоÑноÑÑÑ Ð¾Ð³ÑаниÑена 30 знаÑаÑими ÑиÑÑами. РоÑлиÑие Ð¾Ñ Ñипа numeric, коÑоÑÑй можно ÑоздаÑÑ ÑолÑко в облаÑÑи кÑÑи, Ñип decimal можно ÑоздаÑÑ Ð¸ в ÑÑеке, и в облаÑÑи кÑÑи (поÑÑедÑÑвом ÑÑнкÑий PGTYPESdecimal_new и PGTYPESdecimal_free). ÐÐ»Ñ ÑабоÑÑ Ñ Ñипом decimal еÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ дÑÑгиÑ
ÑÑнкÑий, подклÑÑаемÑÑ
в Ñежиме ÑовмеÑÑимоÑÑи Ñ Informix, опиÑанном в Разделе 34.15.
ÐÐ»Ñ ÑабоÑÑ Ñ Ñипом decimal можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии (ÑодеÑжаÑиеÑÑ Ð½Ðµ в библиоÑеке libcompat).
PGTYPESdecimal_newÐапÑаÑÐ¸Ð²Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° новÑÑ Ð¿ÐµÑеменнÑÑ decimal, ÑазмеÑÑннÑÑ Ð² памÑÑи.
decimal *PGTYPESdecimal_new(void);
PGTYPESdecimal_freeÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа decimal, вÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°Ñ Ð²ÑÑ ÐµÑ Ð¿Ð°Ð¼ÑÑÑ.
void PGTYPESdecimal_free(decimal *var);
34.6.7. ÐнаÑÐµÐ½Ð¸Ñ errno, коÑоÑÑе ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ pgtypeslib
PGTYPES_NUM_BAD_NUMERICÐÑгÑÐ¼ÐµÐ½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑодеÑжаÑÑ Ð¿ÐµÑеменнÑÑ Ñипа numeric (либо ÑказÑваÑÑ Ð½Ð° пеÑеменнÑÑ Ñипа numeric), но пÑедÑÑавление ÑÑого Ñипа в памÑÑи оказалоÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑм.
PGTYPES_NUM_OVERFLOWÐÑоизоÑло пеÑеполнение. Так как Ñип numeric Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿ÑакÑиÑеÑки лÑбой ÑоÑноÑÑи, пÑи пÑеобÑазовании ÑÑого Ñипа в дÑÑгие ÑÐ¸Ð¿Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ пеÑеполнение.
PGTYPES_NUM_UNDERFLOWÐÑоизоÑло анÑипеÑеполнение. Так как Ñип numeric Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿ÑакÑиÑеÑки лÑбой ÑоÑноÑÑи, пÑи пÑеобÑазовании пеÑеменной ÑÑого Ñипа в дÑÑгие ÑÐ¸Ð¿Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ анÑипеÑеполнение.
PGTYPES_NUM_DIVIDE_ZEROÐмела меÑÑо попÑÑка Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° нолÑ.
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пеÑедано некоÑÑекÑное знаÑение Ñипа timestamp.PGTYPES_TS_ERR_EINFTIMEÐнаÑение Ñипа timestamp, пÑедÑÑавлÑÑÑее беÑконеÑноÑÑÑ, полÑÑено в недопÑÑÑимом конÑекÑÑе.
34.6.8. СпеÑиалÑнÑе конÑÑанÑÑ pgtypeslib
PGTYPESInvalidTimestampÐнаÑение Ñипа timestamp, пÑедÑÑавлÑÑÑее недопÑÑÑимое вÑемÑ. ÐÑо знаÑение возвÑаÑÐ°ÐµÑ ÑÑнкÑиÑ
PGTYPEStimestamp_from_ascпÑи оÑибке ÑазбоÑа. ÐамеÑÑÑе, ÑÑо вÑледÑÑвие оÑобенноÑÑи внÑÑÑеннего пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñипаtimestamp, знаÑениеPGTYPESInvalidTimestampв Ñо же вÑÐµÐ¼Ñ Ð¿ÑедÑÑавлÑÐµÑ ÐºÐ¾ÑÑекÑное вÑÐµÐ¼Ñ (1899-12-31 23:59:59). ÐоÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñибок Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение не ÑолÑко ÑÑавнивало ÑезÑлÑÑÐ°Ñ ÑÑнкÑии ÑPGTYPESInvalidTimestamp, но и пÑовеÑÑло ÑÑловиеerrno != 0поÑле каждого вÑзоваPGTYPEStimestamp_from_asc.