sql >> Database teknologi >  >> RDS >> Mysql

Delphi SQL Datolæsningsproblem

Som en generel regel skal du ikke behandle TDateTime-værdier som strenge, men som datoer og klokkeslæt.

Få ikke værdien af ​​et Date/Time-felt med AsString-metoden, brug AsDateTime-metoden og tildel den til en TDateTime-variabel.

Hvis du vil kende datodelene, skal du bruge de medfølgende funktioner til at gøre det. For eksempel dem, der er tilgængelige i DateUtils enhed. SysUtils enhed indeholder også nogle dato/klokkeslæt relaterede funktioner.

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]);

Det samme gælder for lagring af værdier til databasen, i stedet for at bruge et fast datoformat, brug parametre som dette:

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();

Det virker med alle de tilgængelige databaseadgangslag, som jeg kender til.



  1. Vigtige ting at overvåge i PostgreSQL - Analyse af din arbejdsbyrde

  2. viser data fra sql ved at klikke på svg-kort

  3. Hvor mange værdier i en in-klausul er for mange i en SQL-forespørgsel?

  4. Brug for en sql-forespørgsel for at finde indlæg med flest kommenterede rækkefølge efter antal kommentarer/antal DESC