sql >> Database >  >> RDS >> Mysql

Probleem met lezen van Delphi SQL-datum

Beschouw TDateTime-waarden als algemene regel niet als tekenreeksen, maar als datums en tijden.

Krijg niet de waarde van een Date/Time-veld met de AsString-methode, gebruik de AsDateTime-methode en wijs deze toe aan een TDateTime-variabele.

Als je de datumdelen wilt weten, gebruik dan de voorziene functies om dit te doen. Bijvoorbeeld degene die beschikbaar zijn in de DateUtils eenheid. De SysUtils apparaat bevat ook enkele aan datum/tijd gerelateerde functies.

uses
  DateUtils, SysUtils;

var
  MyDate: TDateTime;
  MyDay, MyMonth, MyYear: Word;
begin
  MyDate := MyQuery.Fields[3].AsDateTime;  //not AsString
  MyDay := DayOf(MyDate);
  MyMonth := MonthOf(MyDate);
  MyYear := YearOf(MyDate);
  ShowMessage(Format('Day: %d, Month: %d, Year: %d', [MyDay, MyMonth, MyYear]);

  //or also
  MyDate := EndOfTheMonth(MyDate);
  DecodeDate(MyDate, MyYear, MyMonth, MyDay);
  ShowMessage(Format('Day: %d, Month: %d, Year: %d', [MyDay, MyMonth, MyYear]);

Hetzelfde geldt voor het opslaan van waarden in de database, in plaats van een vast datumformaat te gebruiken, gebruik parameters, zoals deze:

uses
  DateUtils, SysUtils;

var
  MyDate: TDateTime;
  MyDay, MyMonth, MyYear: Word;
begin
  MyDate := EncodeDate(2013, 2, 17);
  MyQuery.SQL.Text := 'insert into myTable (MyDate) values (:MyDate)';
  MyQuery.Params.ParamByName('MyDate').AsDateTime := MyDate;
  MyQuery.ExecSQL();

Het werkt met alle beschikbare databasetoegangslagen die ik ken.



  1. Hoe door komma's gescheiden tekst te splitsen in de MySQL-opgeslagen procedure

  2. Hoe gegevens uit de database ophalen om deze in csv-indeling op een webpagina weer te geven?

  3. IF-voorwaarde in mysql-script

  4. Active Data Guard Physical Standby instellen in RAC One Node Architecture - Deel 2