powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нормализация некорректно введенных в dbf дат
11 сообщений из 11, страница 1 из 1
Нормализация некорректно введенных в dbf дат
    #35707814
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача:
Есть таблица в формате 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
Нормализация некорректно введенных в dbf дат
    #35707894
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, наверное, как-то так:

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
Нормализация некорректно введенных в dbf дат
    #35707963
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Нормализация некорректно введенных в dbf дат
    #35708001
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) генерит
ошибку.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Нормализация некорректно введенных в dbf дат
    #35708199
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Нормализация некорректно введенных в dbf дат
    #35708242
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там ABS совсем лишний, кстати.
...
Рейтинг: 0 / 0
Нормализация некорректно введенных в dbf дат
    #35709371
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо 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
Нормализация некорректно введенных в dbf дат
    #35709386
qqqqqqqqqqq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Нормализация некорректно введенных в dbf дат
    #35709678
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqqqqqqqqqq,

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

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


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

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


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