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

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

Получаешь число дней между датами.
...
Рейтинг: 0 / 0
Число дней между датами
    #35564415
guest12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
? {^2008.10.10}-{^2007.05.04}
...
Рейтинг: 0 / 0
Число дней между датами
    #35564446
homik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://forum.foxclub.ru/read.php?32,177182,321849#msg-321849
...
Рейтинг: 0 / 0
Число дней между датами
    #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
Число дней между датами
    #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
Число дней между датами
    #35564500
liverpool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем.
...
Рейтинг: 0 / 0
Число дней между датами
    #35564547
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там правда есть маленький косячек на датедифф, сам подправишь, как надо и добавишь нужные проверки. Только сейчас заметил что возвращаем тип нумерик, а присваиваю в начале значение дата, но на работу это влиять не будет )
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Число дней между датами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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