|
|
|
Получить список именнинников
|
|||
|---|---|---|---|
|
#18+
в предыдущем посте второй вариант назван неверно - он не "эквивалентый", а не рабочий... из прочих "эквивалентных перезаписей" глаз пока остановился вот на такой (дружит с Null-ом в значениях полей) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. первое условие, при заказе интервала больше года, просто не допустит вычисления оставшейся части и выдаст все записи. Оставшаяся часть сработает на глубине в год. Правая сторона внутреннего OR сработает при заказе интервала с переходом через год, для дней, попадающих в "новый" год. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2004, 05:32:19 |
|
||
|
Получить список именнинников
|
|||
|---|---|---|---|
|
#18+
Уж очень хотелось получить вариант, по возможности, переносимый под SQL Server с минимальным количеством переделок. Получилось вот что Заводится вспомогательная таблица с целыми числами от -366 до +366 пусть таблица DayNums, поле - NumDay Запрос на выдачу списка дней рождений в заказанном диапазоне превращается в такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2004, 20:01:26 |
|
||
|
Получить список именнинников
|
|||
|---|---|---|---|
|
#18+
А если вот так: PARAMETERS [начальная дата] DateTime, [конечная дата] DateTime; SELECT surname & ' ' & firstname AS ФИО, DateSerial(Year( [начальная дата]),Month(datebirth),Day(datebirth)) AS ДеньРождения, Main.DateBirth, [начальная дата], [конечная дата] FROM Staff WHERE datebirth is not null and DateSerial(Year( [начальная дата]),Month(datebirth),Day(datebirth)) between[начальная дата] and [конечная дата] UNION SELECT surname & ' ' & firstname AS ФИО, DateSerial(Year( [конечная дата]),Month(datebirth),Day(datebirth)) AS ДеньРождения, Main.DateBirth, [начальная дата], [конечная дата] FROM Staff WHERE datebirth is not null and DateSerial(Year( [конечная дата]),Month(datebirth),Day(datebirth)) between [начальная дата] and [конечная дата] ORDER BY ДеньРождения, ФИО; Для особо вьедливых можно добавить условие, чтобы DateSerial(Year( [начальная дата]),Month(datebirth),Day(datebirth)) и DateSerial(Year( [конечная дата]),Month(datebirth),Day(datebirth)) не были бы меньше DateBirth. -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 15:41:24 |
|
||
|
Получить список именнинников
|
|||
|---|---|---|---|
|
#18+
это преобразуется к SELECT ... FROM ... WHERE datebirth is not null and DateSerial(Year( [начальная дата]),Month(datebirth),Day(datebirth)) between[начальная дата] and [конечная дата] OR WHERE datebirth is not null and DateSerial(Year( [конечная дата]),Month(datebirth),Day(datebirth)) between [начальная дата] and [конечная дата] ... , что почти = select * from ... where (dateserial(year(date1),month(D_Rozhd),day(D_Rozhd)) between date1 and date2) or (dateserial(year(date2),month(D_Rozhd),day(D_Rozhd)) between date1 and date2) or ((year(date1)+1)<year(date2)) Работать будет, и правильно. По скорости ничего не могу сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 16:56:32 |
|
||
|
Получить список именнинников
|
|||
|---|---|---|---|
|
#18+
кстати, о преобразовании уже сказал Ривкин Дмитрий в соседнем топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 16:57:10 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32781414&tid=1670367]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 291ms |

| 0 / 0 |
