|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
Два поля: dr date '1937-12-02' '2013-12-01' Можно ли как-нибудь средствами самой СУБД вычислить возраст человека по отношению к дате date? Вычесть из второй даты дату рождения - не вариант! Он покажет 76 лет, а человеку на момент наступления date 75 лет, 76 исполнится только на следующий день. Тут бы надо писать какую-нибудь функцию, но sqlite не поддерживает никаких собственных встроенных функций (UDF). И как тут выкрутиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 18:09 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
1) Даты надо правильно вычислять, тогда и проблем не будет 2) http://sqlite.org/c3ref/create_function.html ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 18:16 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
White Owl, 1. Что значит "правильно вычислять"? А у меня приведены какие-то неправильные даты? 2. Я не умею Си. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 18:28 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
2. И, насколько я могу понять, это будет не встроенная прямо в файл БД функция, а нечто хранящееся извне. К примеру, я видел пример, как делать подобную пользовательскую функцию на питоне. Но мне-то надо, что представление (view), хранимое в самой БД, умело вычислять возраст исходя из двух дат. А потом, в питоне, уже просто получить результат запроса с уже вычисленными возрастами. Или не в питоне, в любом другом языке, но получить то же самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 18:33 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
select date - dr + (case when strftime('%m-%d', date) < strftime('%m-%d', dr) then -1 else 0 end) as age from mytable 1. Вычитается из даты date дата dr. Получаем разницу в годах между годом даты date и годом даты dr 2. Проверяем, если месяц и день даты date меньше месяца и дня dr, то вычитаем один год из предыдущего полученного значения, ибо человеку ещё не исполнилось столько годков. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 08:16 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
tororoselect date - dr + (case when strftime('%m-%d', date) < strftime('%m-%d', dr) then -1 else 0 end) as age from mytable 1. Вычитается из даты date дата dr. Получаем разницу в годах между годом даты date и годом даты drА ты знаешь что в SQLite нету типа данных "дата"? select date - dr работает как "взять текст date, перевести его в число. Так же перевести в число текст из поля dr. Вычесть одно число из другого". Перевод текста в число идет успешно до первого не-цифрового символа. То есть запись select date - dr превращается в 2013-1937. tororo2. Проверяем, если месяц и день даты date меньше месяца и дня dr, то вычитаем один год из предыдущего полученного значения, ибо человеку ещё не исполнилось столько годков.Ну да, если даты записаны в формате yyyy-mm-dd эта формула вполне пойдет... до тех пор пока кто-нибудь не запишет дату в формате dd.mm.yyyy. Когда я говорил про неправильное вычисление дат я именно на это и намекал. Если хочешь правильно считать даты - считай их или в юлианском или в юниксовом форматах. Либо разрезай дату на день, месяц и год и считай их по отдельности. Простое date-dr пойдет только дат записанных как число. tororo2. Я не умею Си. Си уметь надо. Это мать всех современных языков, систем и библиотек. tororo2. И, насколько я могу понять, это будет не встроенная прямо в файл БД функция, а нечто хранящееся извне. К примеру, я видел пример, как делать подобную пользовательскую функцию на питоне. Но мне-то надо, что представление (view), хранимое в самой БД, умело вычислять возраст исходя из двух дат. А потом, в питоне, уже просто получить результат запроса с уже вычисленными возрастами. Или не в питоне, в любом другом языке, но получить то же самое. В SQLite не бывает функций встроенных в БД. Бывают функции встроенные в движок, но тогда это уже получается уникальный движок которым надо будет заменять оригинальный. В общем, бери документацию на модуль sqlite к твоему любимому языку. Смотри, есть ли в этом модуле возможность создавать пользовательские функции. Если нет: либо бери другой модуль, либо другой язык, либо другую СУБД. Либо изучай особенности выбранной СУБД и учитывай их. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 18:45 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
авторА ты знаешь что в SQLite нету типа данных "дата"? Знаю. авторНу да, если даты записаны в формате yyyy-mm-dd эта формула вполне пойдет... до тех пор пока кто-нибудь не запишет дату в формате dd.mm.yyyy. Я не дам ему этого сделать! Вот так прям сразу ему и скажу: руки оборву! А если серьёзно, это моя БД, данные в неё вносятся только через мою программу. А уж она проследит, чтобы дата вносилась так как надо. авторСи уметь надо Умей. Я обойдусь. Один лишь синтаксис его бесит неописуемо со всеми его закорючками, запятучками, двойными двоеточками, фигурными скобками, дурацкими повторениями текста при создании экземпляров классов и т.д. Без обид, это лишь моё мнение. авторСмотри, есть ли в этом модуле возможность создавать пользовательские функции Есть. Но мне нужно чтобы возраст умел высчитывать запрос (представление) хранимый в самой БД, а не формирующийся средствами внешнего языка программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 19:19 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
tororoУмей. Я обойдусь. Один лишь синтаксис его бесит неописуемо со всеми его закорючками, запятучками, двойными двоеточками, фигурными скобками, дурацкими повторениями текста при создании экземпляров классов и т.д. Без обид, это лишь моё мнение.Ненависть к языку не означает что его не надо знать. А я вот Питон ненавижу. Я еще и С++ не выношу. И к C# с Java отношусь чрезвычайно отрицательно и сам никогда не выберу эти языки для своих проектов. Что тем не менее не мешает мне уметь писать на них и исправлять-дополнять проекты написанные на этих языках. Потому-то я эти языки и ненавижу что я их знаю :) tororoавторСмотри, есть ли в этом модуле возможность создавать пользовательские функции Есть. Но мне нужно чтобы возраст умел высчитывать запрос (представление) хранимый в самой БД, а не формирующийся средствами внешнего языка программирования.Ну так и будет представление... Оно будет работать только в том случае если работает твоя программа, да. Но это для всех остальных частей твоей программы это будет самое обычное представление. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 19:51 |
|
Как вычислить возраст исходя из двух дат в полях БД sqlite?
|
|||
---|---|---|---|
#18+
автори исправлять-дополнять проекты написанные на этих языках. А мне сие совершенно не грозит. Я не зарабатываю на жизнь программированием. Так что для своих скромных нужд обойдусь питоном. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 18:51 |
|
|
start [/forum/topic.php?fid=54&msg=38407637&tid=2008825]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 154ms |
0 / 0 |