Имя: Пароль:
1C
 
Дата и sqlite
0 Maka
 
30.11.10
10:43
День добрый! Подскажите как реализовать подобное: есть дата документа в формате "YYYYMMDD", при добавлении к ней определенного количества дней получается что-то типа "5032-11-14". Как ее преобразовать в удобоваримый формат?
1 Мулька
 
30.11.10
10:44
Как добавляешь?
2 1C-Nick
 
30.11.10
10:44
а чем 5032-11-14 неудобоворимый?
как должно быть?
3 Maka
 
30.11.10
10:45
date(Ж.date,'+5 days')
4 smaharbA
 
30.11.10
10:45
может преобразовать в дату, добавить и обратно в исо ?
5 Maka
 
30.11.10
10:46
(2) как его обратно в понятный 1с перевести?
6 smaharbA
 
30.11.10
10:46
5032-11-14
ты из будущего ?
7 Maka
 
30.11.10
10:48
(6) если бы... К этой дате "20101105" прибавляю 5 дней и получается вот так.
8 Maka
 
30.11.10
10:52
SQLIte Подскажите по date(Рег.PERIOD,'start of month')
Здесь у человека была подобная проблема... Может кто в курсе..
9 DrZombi
 
гуру
30.11.10
10:54
(8)Зачем тебе двигать документ?
Ты еще про время забыл :)
Как тебе уже сказали в (4) преобразовать в тип DateTime и обратно.
10 Жан Пердежон
 
30.11.10
10:58
(7) значит ты прибавляешься через ж*пу
11 Maka
 
30.11.10
11:01
(9),(10) Можно пример, как это делается?
12 Кирпич
 
30.11.10
11:07
Здеся читать надо
http://www.sqlite.org/lang_datefunc.html
13 orefkov
 
30.11.10
11:17
sqlite не понимает дату в формате YYYYMMDD, только в YYYY-MM-DD
Так что сначала строку с датой преобразуй к нужному формату, потом прибавляй, потом обратно преобразуй в YYYYMMDD.
14 orefkov
 
30.11.10
11:19
+(13)
Что-то типа replace(date(substr(Ж.date, 1, 4) || '-' || substr(Ж.date, 5, 2) || '-' || substr(Ж.date, 7, 2),'+5 days'), '-', '')
15 Ёпрст
 
гуру
30.11.10
11:23
+13 тип того:
ТекстЗапроса="
|Select
| replace(date(substr(:КонПериод,1,4)||'-'||substr(:КонПериод,5,2)||'-'||substr(:КонПериод,7,2),'+5 days'),'-','') [d :Дата]
|";
Запрос.Подставлять("КонПериод",ТекущаяДата());
16 orefkov
 
30.11.10
11:28
+(14)
Проверил, работает
select ж.date [Д1 :Дата],
replace(date(substr(Ж.date, 1, 4) || '-' || substr(Ж.date, 5, 2) || '-' || substr(Ж.date, 7, 2),'+5 days'), '-', '') [Д2 :Дата]
from [Журнал] Ж
limit 10

Мож сделать встроенную функцию для таких конвертаций?
17 orefkov
 
30.11.10
11:30
О, лучше sqlite допилить, чтобы понимал гад такие даты.
18 smaharbA
 
30.11.10
11:32
ага
19 smaharbA
 
30.11.10
11:33
(17) можно свои функции в него впиндюривать
20 smaharbA
 
30.11.10
11:33
но дело в пункте 12
A time string can be in any of the following formats:

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. HH:MM
  9. HH:MM:SS
 10. HH:MM:SS.SSS
 11. now
 12. DDDDDDDDDD
21 Maka
 
30.11.10
11:36
(14),(15) Спасибо большое, получилось!
22 orefkov
 
30.11.10
12:30
Таки доработал я 1sqlite до понимания дат из 1С.
то бишь date(Ж.date,'+5 days') работает сразу.
Надо выкладывать на тест?
23 Ёпрст
 
гуру
30.11.10
12:31
(22) надо!
24 Ёпрст
 
гуру
30.11.10
12:32
+23 возвращать в каком формате будет ?
yyyymmdd ?
25 orefkov
 
30.11.10
12:39
(24)
Естественно.
Вобщем, доработал функцию date.
Если на вход поступает строка длиной 8 символов, то в нее вставляются '-' в нужных местах (приводится к формату YYYY-MM-DD) и при возврате они убираются. В остальных случаях все работает как раньше.

http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/600#601
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший