LINUX.ORG.RU

Sqlite и все все все


0

0

Нужно построить список пар год/месяц как в блогах. Есть какой-нибудь кросс вендорный способ выдернуть distinct Year, Month из таблицы с полем created_at?

anonymous

Ответ на: комментарий от anonymous

datetime.

Я сделал "SELECT DISTINCT strftime("%Y", created_at) AS year, strftime("%m", created_at) AS month FROM articles ORDER BY year, month" но мне нужно нписать запрос так чтобы он работал и в постгрес и в mysql. Я осилю все по отдельности, но не могу найти общего решения, казалось бы тривиальная задача и за десятки лет существования SQL можно было бы функции определить в стандарте.

anonymous
()
Ответ на: комментарий от anonymous

ну общее решение это надо дату хранить в текстовом виде, например 'YYYY-MM-DD', и соответственно делать SUBSTR или как там, по-другому никак, ибо в SQLite как-то совсем по-другому дата хранится, datetime это фактически C-шное время, т.е. число секунд с 70-го года

anonymous
()
Ответ на: комментарий от anonymous

Хранить то он может хоть в стихах, а выдавать по стандарту должен быть одинакого. Также функции вроде date_part могли бы быть и стандартизованы.

anonymous
()
Ответ на: комментарий от anonymous

хранит SQLite ровно так как ты туда пишешь, можешь в поле объявленном как datetime стихи хранить, как угодно, все прекрасно будет храниться. А раз так, то заботиться о чтении данных тоже надо самому, так как сам сохранял и только ты гнаешь как там данные в базе представлены

anonymous
()
Ответ на: комментарий от anonymous

я помоч пытаюсь, кто вопросы-то начал задавать ?

anonymous
()
Ответ на: комментарий от anonymous

http://www.sqlite.org/faq.html

(3) SQLite lets me insert a string into a database column of type integer!

This is a feature, not a bug. SQLite uses dynamic typing. It does not enforce data type constraints. Any data can be inserted into any column. You can put arbitrary length strings into integer columns, floating point numbers in boolean columns, or dates in character columns. The datatype you assign to a column in the CREATE TABLE command does not restrict what data can be put into that column. Every column is able to hold an arbitrary length string. (There is one exception: Columns of type INTEGER PRIMARY KEY may only hold a 64-bit signed integer. An error will result if you try to put anything other than an integer into an INTEGER PRIMARY KEY column.)

But SQLite does use the declared type of a column as a hint that you prefer values in that format. So, for example, if a column is of type INTEGER and you try to insert a string into that column, SQLite will attempt to convert the string into an integer. If it can, it inserts the integer instead. If not, it inserts the string. This feature is called type affinity.

http://www.sqlite.org/datatype3.html

anonymous
()
Ответ на: комментарий от anonymous

Да блин, меня интересует то как можно сделать кросс-database выборку месяца и года из поля где хранится datetime. Пох что можно всунуть строку. Считаем что там datetime. Скулайт может что угодно позволять, сейчас речь не об этом. Нужен общий запрос для трех перечисленных субд для экстракции составляющих даты - месяца и года.

Есть таблица: posts: created_at DATETIME

| now() |
| now() |

Хочу

| 01 | 2009 |
| 01 | 2009 |

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.