Interbase + date format

3 отговора 77 прегледа
#1

Interbase + date format

Здравейте,
Имам следния проблем с Interbase 6:
Опитвам се да запиша данни от тип "date" в поле от тип "varchar". Работи естествено но получения резултат е във формат yyyy-mm-dd.
В полето от тип дата всичко си е нормално.

Ето и кода :

new.term_string = cast (new.f_term as varchar(15));

където f_term e от тип "DATE"
term_string - VARCHAR(15)

като резултат в полето f_term формата е dd.mm.yyyy
a в term_string - yyyy-mm-dd

Къде бъркам ? Благодаря предварително

----------
По склона към връх Фудзи плахо пълзи охлюв към самото небе.
Отговор
в отговор на Vapi #2

Ами много просто...

Нищо не си объркал :)
Форматът dd.mm.yyyy се определя от настройките на Winwdows-а на клиентската машина. Другото се определя от IB-то.
Ако искаш да си записваш по различен начин датата можеш да използваш extract

create procedure FormatDate(MyDate Date)
returns (MyFormatedDate Varchar(15))
as
declare variable y integer;
declare variable m integer;
declare variable d integer;
begin
MyFormatedDate = '';
if (MyDate is not null) then
begin
y = extract(year from MyDate);
m = extract(month from MyDate);
d = extract(day from MyDate);
if (d < 10) then
MyFormatedDate = MyFormatedDate || '0' || d || '.';
else
MyFormatedDate = MyFormatedDate || d || '.';
if (m < 10) then
MyFormatedDate = MyFormatedDate || '0' || m || '.';
else
MyFormatedDate = MyFormatedDate || m || '.';
MyFormatedDate = MyFormatedDate || y;
end
suspend;
end


Отговор
в отговор на Vapi #3

Re: Interbase + date format

В IB/FB формата на преобразуване дата в текст (yyyy-mm-dd) е твърдо заложен.
Не виждам смисъл да съхраняваш в базата дата форматирана като текст. По-удачно, според мен е да си я държиш като дата, а на клиента да я форматираш както си решиш. Предполагам, че затова и твърдиш
В полето от тип дата всичко си е нормално.
Предполагам, че ако си смениш регионалните настройки на клиентския компютър, датата ще я видиш форматирана по друг начин.

Ако все пак държиш на твоето :
new.term_string = EXTRACT(DAY FROM new.f_term ) || '.' || EXTRACT(MONTH FROM new.f_term ) || '.' || EXTRACT(YEAR FROM new.f_term );

Отговор
в отговор на Vapi #4

Сигурно съм много тъп

че не се сетих веднага. Благодаря много и на двамата.

----------
По склона към връх Фудзи плахо пълзи охлюв към самото небе.
Отговор