Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Число дней между датами / 8 сообщений из 8, страница 1 из 1
29.09.2008, 07:42
    #35564412
liverpool
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
Имеется таблица tData. В ней два поля типа Date. Поле Date1 - начало периода, Date2 - конец периода. Как в запросе получить число дней между этими датами ? Тут проблема если первая дата в одном месяце, а вторая в следующем. Т е надо аналог функции DateDiff() в MSSQLServer.
...
Рейтинг: 0 / 0
29.09.2008, 07:51
    #35564414
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
? В чем проблема?

? {^Date2}-{^Date1}
? {^2008.10.10>-{^2007.05.04}

Получаешь число дней между датами.
...
Рейтинг: 0 / 0
29.09.2008, 07:52
    #35564415
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
? {^2008.10.10}-{^2007.05.04}
...
Рейтинг: 0 / 0
29.09.2008, 08:52
    #35564446
homik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
http://forum.foxclub.ru/read.php?32,177182,321849#msg-321849
...
Рейтинг: 0 / 0
29.09.2008, 09:16
    #35564457
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
**********************
*почти как одноименная в t_SQL
***********************
FUNCTION dateDiff
PARAMETERS lcEdinica,ldstrDate, ldDate
*year | quarter | month | week | day | hour | minute | second |
ldReturn={}
lnSeconds= 0 
IF VARTYPE(ldDate)<>'D' AND VARTYPE(ldDate)<>'T'
	RETURN ldReturn
ENDIF 
IF VARTYPE(ldDate)='D'
	DO CASE
		CASE INLIST(lcEdinica,'year','yy','yyyy')
			ldReturn=GOMONTH(ldDate, lnKol_vo* 12 )
		CASE INLIST(lcEdinica,'quarter','qq', 'q')	
			ldReturn=GOMONTH(ldDate, lnKol_vo* 3 )
		CASE INLIST(lcEdinica,'month','mm','m')
			ldReturn=GOMONTH(ldDate, lnKol_vo)
		CASE INLIST(lcEdinica,'week','ww','wk') 
			ldReturn=ldDate+lnKol_vo* 7 
		CASE INLIST(lcEdinica,'day','dd','d')
			ldReturn=ldDate+lnKol_vo	
	ENDCASE
ELSE 
	lnSeconds=HOUR(ldDate)* 3600 +MINUTE(ldDate)* 60 +SEC(ldDate)
	DO CASE
		CASE INLIST(lcEdinica,'year','yy','yyyy')
			ldReturn=CAST(GOMONTH(ldDate, lnKol_vo* 12 ) as datetime)+lnSeconds
		CASE INLIST(lcEdinica,'quarter','qq', 'q')	
			ldReturn=CAST(GOMONTH(ldDate, lnKol_vo* 3 ) as datetime)+lnSeconds
		CASE INLIST(lcEdinica,'month','mm','m')
			ldReturn=CAST(GOMONTH(ldDate, lnKol_vo)  as datetime)+lnSeconds
		CASE INLIST(lcEdinica,'week','ww','wk') 
			ldReturn=ldDate+lnKol_vo* 604800 
		CASE INLIST(lcEdinica,'day','dd','d')
			ldReturn=ldDate+lnKol_vo* 86400 
		CASE INLIST(lcEdinica,'hour','hh')	
			ldReturn=ldDate+lnKol_vo* 3600 
		CASE INLIST(lcEdinica,'minute','mi','n')	
			ldReturn=ldDate+lnKol_vo* 60 
		CASE INLIST(lcEdinica,'second','ss','s')	
			ldReturn=ldDate+lnKol_vo
	ENDCASE 	
ENDIF 	
RETURN 	ldReturn
ENDFUNC

...
Рейтинг: 0 / 0
29.09.2008, 09:35
    #35564476
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
**********************
*почти как одноименная в t_SQL
***********************
FUNCTION dateAdd
PARAMETERS lcEdinica,lnKol_vo, ldDate
*year | quarter | month | week | day | hour | minute | second |
ldReturn={}
lnSeconds= 0 
lcEdinica=LOWER(lcEdinica)
IF VARTYPE(ldDate)<>'D' AND VARTYPE(ldDate)<>'T'
	RETURN ldReturn
ENDIF 
IF VARTYPE(ldDate)='D'
	DO CASE
		CASE INLIST(lcEdinica,'year','yy','yyyy')
			ldReturn=GOMONTH(ldDate, lnKol_vo* 12 )
		CASE INLIST(lcEdinica,'quarter','qq', 'q')	
			ldReturn=GOMONTH(ldDate, lnKol_vo* 3 )
		CASE INLIST(lcEdinica,'month','mm','m')
			ldReturn=GOMONTH(ldDate, lnKol_vo)
		CASE INLIST(lcEdinica,'week','ww','wk') 
			ldReturn=ldDate+lnKol_vo* 7 
		CASE INLIST(lcEdinica,'day','dd','d')
			ldReturn=ldDate+lnKol_vo	
	ENDCASE
ELSE 
	lnSeconds=HOUR(ldDate)* 3600 +MINUTE(ldDate)* 60 +SEC(ldDate)
	DO CASE
		CASE INLIST(lcEdinica,'year','yy','yyyy')
			ldReturn=CAST(GOMONTH(ldDate, lnKol_vo* 12 ) as datetime)+lnSeconds
		CASE INLIST(lcEdinica,'quarter','qq', 'q')	
			ldReturn=CAST(GOMONTH(ldDate, lnKol_vo* 3 ) as datetime)+lnSeconds
		CASE INLIST(lcEdinica,'month','mm','m')
			ldReturn=CAST(GOMONTH(ldDate, lnKol_vo)  as datetime)+lnSeconds
		CASE INLIST(lcEdinica,'week','ww','wk') 
			ldReturn=ldDate+lnKol_vo* 604800 
		CASE INLIST(lcEdinica,'day','dd','d')
			ldReturn=ldDate+lnKol_vo* 86400 
		CASE INLIST(lcEdinica,'hour','hh')	
			ldReturn=ldDate+lnKol_vo* 3600 
		CASE INLIST(lcEdinica,'minute','mi','n')	
			ldReturn=ldDate+lnKol_vo* 60 
		CASE INLIST(lcEdinica,'second','ss','s')	
			ldReturn=ldDate+lnKol_vo
	ENDCASE 	
ENDIF 	
RETURN 	ldReturn
ENDFUNC

...
Рейтинг: 0 / 0
29.09.2008, 10:01
    #35564500
liverpool
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
Спасибо всем.
...
Рейтинг: 0 / 0
29.09.2008, 10:24
    #35564547
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Число дней между датами
Там правда есть маленький косячек на датедифф, сам подправишь, как надо и добавишь нужные проверки. Только сейчас заметил что возвращаем тип нумерик, а присваиваю в начале значение дата, но на работу это влиять не будет )
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Число дней между датами / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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