Страница 1 из 1

правильный формат даты в ХП - DD.MM.YYYY

Добавлено: 12 апр 2007, 17:51
break
Внутри хранимой процедуры соединяю VARCHAR поле с полем DATE
...
OPERATIONS_INFO = :OP_SHORT_NAME || ' ' || :V_OP_DATE;
...
- как сделать чтобы поле DATE было в правильном формате DD.MM.YYYY

сам FB по умолчанию делает формат YYYY.MM.DD

Обязательно использовать UDF???

Добавлено: 12 апр 2007, 17:57
break
о!! сделал так:

EXTRACT(DAY from :V_OP_DATE) || '.' ||
EXTRACT(MONTH from :V_OP_DATE) || '.' ||
EXTRACT(YEAR from :V_OP_DATE) ||

Может есть еще варианты ???

Добавлено: 12 апр 2007, 19:10
WildSery
Есть. Но этот имхо лучший.

Добавлено: 13 апр 2007, 07:42
Dimitry Sibiryakov
Вообще-то для третьего диалекта преобразование даты в строку определяется SQL стандартом и дает YYYY-MM-DD. Как автор умудрился получить точки в качестве разделителя - загадка.

Добавлено: 13 апр 2007, 11:44
WildSery
Я думаю он получил именно то, что ты говоришь, а написал со своими, т.к. основное внимание сосредоточил на порядке вывода годов-месяцев-дней.

Добавлено: 13 апр 2007, 13:55
Slavik
break писал(а):Может есть еще варианты ???
Можно ещё так:

Код: Выделить всё

substring(current_date from 9 for 2)||'.'||
substring(current_date from 6 for 2)||'.'||
substring(current_date from 1 for 4)
...не теряются нолики.

Добавлено: 15 апр 2007, 12:05
Attid
нолики можно и добавить =)

Код: Выделить всё

CREATE PROCEDURE LPAD (
    str varchar(60),
    count_ integer,
    substr varchar(10))
returns (
    result varchar(60))
as
begin
/* Дополнение строки слева (LPAD)

Функция Дополнение строки слева заданными символами.
Спецификация
LPAD (<строка>, <длина> [, <подстрока> ])
<строка> ::= <значимое символьное выражение>
<длина> ::= <значимое числовое выражение>
<подстрока> ::= <значимое символьное выражение>
Общие правила
   1. <Строка> дополняется слева указанной в <подстроке> последовательностью символов до указанной <длины> (возможно, с повторением последовательности).
   2. Если <подстрока> не указана, то по умолчанию <строка> дополняется пробелами.
   3. Если <длина> меньше длины <строки>, то исходная <строка> усекается до заданной <длины>.
   4. Если длина <подстроки> больше чем указанная <длина>, то <строка> дополняется частью <подстроки>.
Возвращаемое значение
<Строка>, дополненная слева указанными последовательностями символов. Длина <строки>- максимум из исходной длины <строки> и <длины>.*/
  result = substring(:str from 1 for :count_);
  while (char_length(:result) < :count_) do
      result = :substr || :result;
  suspend;
end

Добавлено: 15 апр 2007, 23:36
break
-->Как автор умудрился получить точки в качестве разделителя - загадка.

Действительно неправильно написал сосредоточив внимание на порядке вывода, на самом деле тире (-).

Всем спасибо, понравился вариант Slavik-а так-как нолики с меня потом потребовали конечные пользователи - мол не стандартная дата у тебя в программе.

сам я сделал так:

Код: Выделить всё

CREATE PROCEDURE SP_CORRECT_DATE(
    A_DATE DATE)
RETURNS (
    XDATE VARCHAR(10))
AS
declare variable V_DAY varchar(2);
declare variable V_MONTH varchar(2);
declare variable V_NUM integer;
begin

  V_NUM = EXTRACT(DAY from :A_DATE);
  if (:V_NUM < 10) then
    begin
      V_DAY = '0' || :V_NUM;
    end
  else
    begin
      V_DAY = :V_NUM;
    end

  V_NUM = EXTRACT(MONTH from :A_DATE);
  if (:V_NUM < 10) then
    begin
      V_MONTH = '0' || :V_NUM;
    end
  else
    begin
      V_MONTH = :V_NUM;
    end

  XDATE = V_DAY || '.' || V_MONTH || '.' || EXTRACT(YEAR from :A_DATE);

  suspend;
end
но его вариант лучше.