Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывести дату строкой 
V
    Опции темы
-Сергей-
Дата 18.3.2009, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 2.8.2003
Где: Россия

Репутация: нет
Всего: 1



Добрый день!

выполняю следующий запрос
Код

select trim(to_char(sysdate,'«dd» Month yyyy')||' г.') "DATE" from dual


на выходе понятно что получаю «18» Март     2009 г.

Вопрос:

Возможно ли стандартными методами сделать так чтобы месяц выводился: Января, Февраля, Марта и т.д.?

Или надо будет руками все парсить?

И еще как от лишних пробелов между месяцем и годом избавиться?

Это сообщение отредактировал(а) -Сергей- - 18.3.2009, 06:17
--------------------
Для утвердительного ответа достаточно лишь одного слова - "да". Все прочие слова придуманы, чтобы сказать "нет".
PM MAIL WWW ICQ MSN   Вверх
azesmcar
Дата 18.3.2009, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Код

create or replace function formatDate(dt date)
    return varchar2 is
begin
    return    to_char(dt, '«dd» ') ||
            rtrim(to_char(dt,'month')) ||
            case when to_char(dt,'mm') in ('03', '08') then 'а' else 'я' end ||
            to_char(dt, ' yyyy') || ' г.';
end;

select formatDate(sysdate) from dual


PM   Вверх
-Сергей-
Дата 18.3.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 2.8.2003
Где: Россия

Репутация: нет
Всего: 1



azesmcar, Спасибо! Значит руками все-таки!

при вызове ошибку выдает
Цитата

ORA-06502: PL/SQL: : буфер символьных строк слишком маленький ошибка числа или значения
ORA-06512: на  "SM.FORMATDATE", line 4

View program sources of error stack?


я поправил, вот так работает
Код

create or replace function FormatDate(dt in date) return varchar2 is
  dateout varchar2(30);
begin
  select to_char(dt, '«dd» ') ||
         rtrim(to_char(dt,'month')) ||
         case when to_char(dt,'mm') in ('03', '08') then 'а' else 'я' end ||
         to_char(dt, ' yyyy') || ' г.' into dateout from dual;
  return ltrim(rtrim(dateout));
end;


Это сообщение отредактировал(а) -Сергей- - 18.3.2009, 10:35
--------------------
Для утвердительного ответа достаточно лишь одного слова - "да". Все прочие слова придуманы, чтобы сказать "нет".
PM MAIL WWW ICQ MSN   Вверх
azesmcar
Дата 18.3.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата

Значит руками все-таки! 


ну да, там особо нечего делать, на А заканчиваются только "МартА" и "АвгустА", остальные на Я..
PM   Вверх
password
Дата 18.3.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: 4
Всего: 8



Код

select to_char(sysdate, 'dd')||' '||
(case when to_char(sysdate, 'mm')='01' then 'января' 
      when to_char(sysdate, 'mm')='02' then 'февраля'
      when to_char(sysdate, 'mm')='03' then 'марта'
      when to_char(sysdate, 'mm')='04' then 'апреля'
      when to_char(sysdate, 'mm')='05' then 'мая'
      when to_char(sysdate, 'mm')='06' then 'июня'
      when to_char(sysdate, 'mm')='07' then 'июля'
      when to_char(sysdate, 'mm')='08' then 'августа'
      when to_char(sysdate, 'mm')='09' then 'сентября'
      when to_char(sysdate, 'mm')='10' then 'октября'
      when to_char(sysdate, 'mm')='11' then 'ноября'
      when to_char(sysdate, 'mm')='12' then 'декабря'
       end)||' '||to_char(sysdate, 'yyyy')||' г.' ddd from dual

PM MAIL Skype   Вверх
-Сергей-
Дата 18.3.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 2.8.2003
Где: Россия

Репутация: нет
Всего: 1



Всем спасибо!
--------------------
Для утвердительного ответа достаточно лишь одного слова - "да". Все прочие слова придуманы, чтобы сказать "нет".
PM MAIL WWW ICQ MSN   Вверх
azesmcar
Дата 18.3.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



-Сергей-, совсем забыл, надо последний символ убрать только для тех кто на я заканчивается
PM   Вверх
Zloxa
Дата 18.3.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(-Сергей- @  18.3.2009,  10:16 Найти цитируемый пост)
ORA-06502

Видимо Вы сделали чуть не так, как вам показали
Цитата(-Сергей- @  18.3.2009,  10:16 Найти цитируемый пост)
я поправил

Зря Вы используете Select into там, где можно обойтись обычным присваиванием, это существенно отаржается по производительности.
Вообще по хорошему, уже само наличие функции существенно замедлит работу. Может быть лучшим решением было бы, там где это надо, использовать выражение а не функцию.

К варианту azesmcar, могу лищь порекомендовать объявить функцию как детерминированную (начиная с десятки оракля вроде предпринимает попытки кэширования результатов детерминированных функций), ну и явно указывать nls_language в to_char-е, чтобы не получалось чтото вроде :
Код

SQL> select formatDate(sysdate) from dual;
 
FORMATDATE(SYSDATE)
--------------------------------------------------------------------------------
«18» marchа 2009 г.
 



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
azesmcar
Дата 18.3.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата

при вызове ошибку выдает


у меня работает..
Цитата

ну и явно указывать nls_language в to_char-е


стоит добавить..
PM   Вверх
-Сергей-
Дата 18.3.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 2.8.2003
Где: Россия

Репутация: нет
Всего: 1



Цитата

Видимо Вы сделали чуть не так, как вам показали

Все также до последнего символа!

Цитата

Зря Вы используете Select into там

Если по-другому не работает то как еще
--------------------
Для утвердительного ответа достаточно лишь одного слова - "да". Все прочие слова придуманы, чтобы сказать "нет".
PM MAIL WWW ICQ MSN   Вверх
Zloxa
Дата 18.3.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(-Сергей- @  18.3.2009,  14:06 Найти цитируемый пост)
Если по-другому не работает

Значит чтото не то делаете
Код

SQL> create or replace function formatDate(dt date)
  2      return varchar2 is
  3  begin
  4      return    to_char(dt, '«dd» ') ||
  5              rtrim(to_char(dt,'month','nls_date_language=russian')) ||
  6              case when to_char(dt,'mm') in ('03', '08') then 'а' else 'я' end ||
  7              to_char(dt, ' yyyy') || ' г.';
  8  end;
  9  /
 
Function created
SQL> select formatDate(sysdate) from dual;
 
FORMATDATE(SYSDATE)
--------------------------------------------------------------------------------
«18» марта 2009 г.
 



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.