Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
ssssss
Guest
23 авг 07, 20:53    [4568998]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
ssssss
Guest
как из to_char(sysdate,'qyyyy') получить дату начала квартала
23 авг 07, 20:57    [4569011]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
Elic
Member

Откуда:
Сообщений: 29976
to_date(substr(s, 2) || substr(s, 1, 1) * 3 - 2, 'yyyymm')
...
23 авг 07, 21:02    [4569032]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
ssssss
Guest
супер, а есть ли способ получше чтобы пребразовать varchar в число с разделителем '.' по какойто заданной маске:
to_number(to_char('55555','99g999', 'nls_numeric_characters='',.'''))
23 авг 07, 22:34    [4569227]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
ssssss
супер, а есть ли способ получше чтобы пребразовать varchar в число с разделителем '.' по какойто заданной маске:
to_number(to_char('55555','99g999', 'nls_numeric_characters='',.'''))


Ну во- первых, изыскиваемый Вами способ конечно не лучше способа Elic.
Дату естественно и надо хранить как дату, все остальное - декадентство :-)

Вот очевидно то, что Вы ищете. Очень неудобный и я бы сказал беспринципный
способ, который выхолащивает суть понятия "первый день квартала". Для четкости и для понимания я полностью отказался от неявного преобразования
(2Elic: substr * 3 - 2 чуть резанул по глазам :-) )
- получился перепев , ухудшенный бирюльками :-)

with tab1 as
(select to_char(sysdate,'QYYYY') col1 from dual)
select to_char(to_number('1'||lpad(to_char(to_number(substr(col1, 1, 1)) * 3 - 2),2,'0')||
substr(col1,2)),'09G99G9999','nls_numeric_characters='',.''') from tab1
/
01.07.2007
23 авг 07, 23:29    [4569408]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
ssssss
Guest
to dmidek: это другой опрос не имеющии отношения к первому
23 авг 07, 23:36    [4569429]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
Elic
Member

Откуда:
Сообщений: 29976
dmidek
2Elic: substr * 3 - 2 чуть резанул по глазам :-)
Ну нравится мне показывать принцип лаконичнее. А знание правил преобразования и приоритетов - сила :)
dmidek
lpad(to_char(x),2,'0')
По поводу избавления от рези:
to_char(x, 'fm00')
24 авг 07, 08:41    [4569782]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
Elic
Member

Откуда:
Сообщений: 29976
ssssss
пребразовать varchar в число с разделителем '.' по какойто заданной маске:
Число не имеет разделителей.
А строку в строку - regexp.
ssssss
to_number(to_char('55555','99g999', 'nls_numeric_characters='',.'''))
Два непонятных преобразования. Определись. RTFM
24 авг 07, 08:47    [4569798]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
ssssss
Guest
есть целое число и его надо преобразовать в число с десятичной дробью по определенной маске например (55555,'999.99')=555.55
24 авг 07, 16:30    [4573575]     Ответить | Цитировать Сообщить модератору
 Re: как пребразовать '12007' format 'QYYYY'в первый день квартала  [new]
Volder
Member

Откуда: Москва
Сообщений: 474
ssssss
есть целое число и его надо преобразовать в число с десятичной дробью по определенной маске например (55555,'999.99')=555.55
странно вы преобразовываете
число как было так целое и останется - независимо по какой маске вы его выводите ))
вам надо
num/100
24 авг 07, 16:47    [4573685]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить