Datum von sqlda_t Struktur auslesen

anixant

Neuer Benutzer
Beiträge
1
Guten Tag!

Ich bin Anfänger und möchte euch um Hilfe bitten. Ich versuche ein Datum aus sqlda_t Struktur mit C auslesen. Es kommt falsches Datum 2000-01-10, obwohl in Abfrage 2021-10-02 festgelegt ist.

Könntet ihr eine Tipp geben, woran das Problem liegt?


upload_2021-10-1_10-55-19.png

EXEC SQL BEGIN DECLARE SECTION;
char query[1024] = "select '2021-10-02'::date";
char colname[1024];
EXEC SQL END DECLARE SECTION;

// Connect to DB
EXEC SQL CONNECT TO test_db;

EXEC SQL PREPARE stmt FROM :query;
EXEC SQL DECLARE cur CURSOR FOR stmt;

EXEC SQL OPEN cur;

EXEC SQL FETCH NEXT FROM cur INTO DESCRIPTOR sqlda_d;

int i;
for (i=0 ; i < sqlda_d->sqld ; i++)
{
sqlvar_t v = sqlda_d->sqlvar;

strncpy( colname, v.sqlname.data, v.sqlname.length );
colname[v.sqlname.length] = '\0';

printf("\n");
printf("Type='%d'\n", v.sqltype );
printf("NLength='%d'\n", v.sqlname.length );
printf("Name='%s'\n", colname );

switch( v.sqltype )
{
case ECPGt_date:

printf("length von v.sqldate : %u Bytes\n", v.sqllen);

printf("DATE von SQLDA: PGTYPESdate_to_asc '%s'\n", PGTYPESdate_to_asc( *(char*)(v.sqldata)));

break;
}
printf("\n");
}
EXEC SQL CLOSE cur;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT ALL;
 
Werbung:
keine Ahnung was Du da machst. Ich bleibe mal beim SQL
Code:
select '2021-10-02'::date

Das ist schlecht gemacht. ::date definiert zwar den Ergebnistyp, aber der Eingangstyp ist String. So und von String nach Date ohne Formatangabe, das ist eine Implizite Konvertierung, deren Ergebnis mehr oder weniger Glückssache ist. Versuch es mal explizit mit to_date(<string>,<formatmaske>), dann kannst Du Dir am Schluss auch die Brechstange ::date sparen.
 
Zurück
Oben