Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нормализация некорректно введенных в dbf дат / 11 сообщений из 11, страница 1 из 1
11.12.2008, 12:28
    #35707814
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Задача:
Есть таблица в формате foxpro dbf -> поле тип date , например

mydate
---------------
12/30/1899
12/30/1199
12/30/1699
12/30/0801

и .т.д. первые две цифры года некоректны, корректны вторые, причём 01,02,03 относится к нашему веку, а 99, 79 и т.д. к прошлому.

Надо получить:
mydate
---------------
12/30/1999
12/30/1999
12/30/1999
12/30/2001

Наверняка, кто то сталкивался, есть ли код ?

P.S. на фокспро давно уже не программирую
...
Рейтинг: 0 / 0
11.12.2008, 12:48
    #35707894
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Ну, наверное, как-то так:

CREATE CURSOR temp(date d)

SET DATE AMERICAN

INSERT INTO temp (date) VALUES ({12/30/1899})

INSERT INTO temp (date) VALUES ({12/30/1199})

INSERT INTO temp (date) VALUES ({12/30/1699})

INSERT INTO temp (date) VALUES ({12/30/0801})

SCAN ALL

?DATE(IIF(YEAR(date)-INT(YEAR(date)/100)*100>50,
YEAR(date)-INT(YEAR(date)/100)*100+1900,YEAR(date)-INT(YEAR(date)/100)*100+2000),
MONTH(date), DAY(date))

ENDSCAN


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.12.2008, 13:00
    #35707963
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Sa,


Что-нибудь типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
USE IN SELECT("CurTest")
CREATE CURSOR CurTest (mydate D, MyTest D)
INSERT INTO CurTest (mydate) VALUES ({^ 1897 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 1198 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 1699 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 0700 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 0801 . 12 . 30 })

lnBaseCent =  1900 
lnDivYear =  30 

REPLACE ALL MyTest WITH DATE(lnBaseCent + lnDivYear + (ABS(YEAR(MyDate)% 100 ) + ( 100  - lnDivYear))% 100 , MONTH(MyDate), DAY(MyDate))

BROWSE 

Эко меня ;) Главное, чтобы 29 февраля не нагадило нам.
...
Рейтинг: 0 / 0
11.12.2008, 13:11
    #35708001
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
> REPLACE ALL MyTest WITH DATE(lnBaseCent + lnDivYear +
> (ABS(YEAR(MyDate)%100) + (100 - lnDivYear))%100, MONTH(MyDate),
> DAY(MyDate))

> Эко меня ;) Главное, чтобы 29 февраля не нагадило нам.

Да, уж. Завернул.

PS У меня можно проще. про % из головы вылетело :)

PPS У нас обоих выкинет ошибку на пустой дате, так как DATE(0,0,0) генерит
ошибку.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.12.2008, 14:09
    #35708199
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Galyamov Rinat
> REPLACE ALL MyTest WITH DATE(lnBaseCent + lnDivYear +
> (ABS(YEAR(MyDate)%100) + (100 - lnDivYear))%100, MONTH(MyDate),
> DAY(MyDate))

> Эко меня ;) Главное, чтобы 29 февраля не нагадило нам.

Да, уж. Завернул.

PS У меня можно проще. про % из головы вылетело :)

PPS У нас обоих выкинет ошибку на пустой дате, так как DATE(0,0,0) генерит
ошибку.



Там FOR можно воткнуть и в SCAN и в REPLACE.
...
Рейтинг: 0 / 0
11.12.2008, 14:19
    #35708242
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Там ABS совсем лишний, кстати.
...
Рейтинг: 0 / 0
11.12.2008, 21:27
    #35709371
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Большое спасибо Galyamov Rinat и Kruchinin Pahan

Остановился на таком варианте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
USE IN SELECT("CurTest")
CREATE CURSOR CurTest (mydate D, MyTest D)
INSERT INTO CurTest (mydate) VALUES ({^ 1897 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 1198 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 1699 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 0700 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 0801 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({})

lnBaseCent =  1900 
lnDivYear =  30 

REPLACE ALL MyTest WITH DATE(lnBaseCent + lnDivYear + (YEAR(MyDate)% 100  + ( 100  - lnDivYear))% 100 , MONTH(MyDate), DAY(MyDate)) FOR NOT EMPTY(mydate)

BROWSE 
...
Рейтинг: 0 / 0
11.12.2008, 21:40
    #35709386
qqqqqqqqqqq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE CURSOR CurTest (mydate D, MyTest D)
INSERT INTO CurTest (mydate) VALUES ({^ 1897 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 1198 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 1699 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 0700 . 12 . 30 })
INSERT INTO CurTest (mydate) VALUES ({^ 0801 . 12 . 30 })

SET CENTURY TO  19  ROLLOVER  60 
SET CENTURY OFF

REPLACE ALL MyTest WITH CTOD(DTOC(MyDate))
...
Рейтинг: 0 / 0
12.12.2008, 06:06
    #35709678
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
qqqqqqqqqqq,

Уел ;)
...
Рейтинг: 0 / 0
12.12.2008, 07:45
    #35709707
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
> Автор: Kruchinin Pahan
> qqqqqqqqqqq,
>
> Уел ;)

Ну что сказать. Извращенец!!!! :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.12.2008, 09:48
    #35709876
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация некорректно введенных в dbf дат
Galyamov Rinat
> Автор: Kruchinin Pahan
> qqqqqqqqqqq,
>
> Уел ;)

Ну что сказать. Извращенец!!!! :)
Разве ж я мог пропустить вашу "высшую математику"?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нормализация некорректно введенных в dbf дат / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]