powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как в mysql получить первое число месяца текущего времени
25 сообщений из 62, страница 1 из 3
как в mysql получить первое число месяца текущего времени
    #39215337
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте , я новичок не судите строго
подробнее таблица dirty_data

ddl
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE `dirty_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_record` datetime NOT NULL,
  `date1_record` date NOT NULL,
  `lic_sch` varchar(16) DEFAULT NULL,
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `kod_st` varchar(8) DEFAULT NULL,
  `kod_tn` varchar(8) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `data_new` int(11) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



В эту таблицу ежемесячно буду записывать по 60 тыс записей с помощью хранимки
поле date_record хочу использовать как текущее время записи (наверняка надо брать с минутами и секундами, тип посоветуйте)
поле date1_record будет использоваться как первое число месяца даты записи

остальные поля заполняет запрос

посоветуйте какие ключевые поля использовать , по каким полям лучше индексы построить,
поле лицевой счет будет уникальным


Еще список полей в таблице не окончательный(добавлю 6) , эти поля будут заполняться из веб сервиса
по полю лиц счет и полю первое чило месяца(т е date1_record)
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215416
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как по дефалту присвоить текущее время, и первое число месяца/?
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215423
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7как по дефалту присвоить текущее время,timestamp on default current_timestamp

olegon7и первое число месяца/?только извне или триггером
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215425
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7поле date1_record будет использоваться как первое число месяца даты записиЗачем вообще это поле?
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215428
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7поле лицевой счет будет уникальнымТ.е. по каждому лицевом счету будет не более одной операции (или что там в этой таблице) ?
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215430
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

подозреваю, что уникальной будет пара "счёт-месяц"
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215465
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

правильно именно счет месяц

60 тыс лиц счетов январь
60 тыс лиц счетов феврвль

и т д
лицевые счета будут повторятся ежемесячно

поле date1_record и нужно для идентификации месяца ....
в основном запросы будкт строится получить счета за такой то месяц where date1_record=январь

поле date_record как время записи в таблицу уже с учетом часов минут
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215470
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например если записал 3 -его числа - а данные ошибочны , потому что записать одни и те же данные можно записать несколько раз в месяц что бы без проблем смог удалить лишние
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215484
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

а если так? timestamp (4) ограничить он будет выдавать месяц год так?

Запросом я могу выбрать из него нужный месяц?
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215491
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7timestamp (4) ограничить он будет выдавать месяц год так?Нет.
В MySQL нет готового и удобного типа данных для хранения только года-месяца.
А timestamp(4) означает обычный timestamp с дополнительными четырьмя знаками после запятой. Т.е. с точностью до 100 мкс.
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215557
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хранимка выполняется с ошибкой 1136 - Column count doesn't match value count at row 1

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE DEFINER=`Oleg`@`` PROCEDURE `zap_copy`()
BEGIN
INSERT INTO dirty_data
	select 
kartab_askue.lic_sch from kartab_askue
where del=0 ;
END
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215559
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в чем причина?
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215571
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все исправил)
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215572
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7,

Буквальный перевод - Количество колонок не соответствует количеству значений.
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215603
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
так что вы посоветуете с датой
использовать 2 поля c типом datetime

по умолчанию они должны быть заполнены константой(null либо empty)

а если при инсерте в коде хранимки прописать

что бы поля date1_record и date_record заполнялись функциями now() и если есть такая функция обрезания до месяца год(если конечно есть такая в mysql)

вот хранимка
Код: sql
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.
BEGIN
INSERT INTO dirty_data (date_record,lic_sch,data_kon,date_kon,base,fam,`name`,otch,cod_tn,cod_st,data_new,yearmon)
select 
now() As time1,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
kartab_askue.fam,
kartab_askue.`name`,
kartab_askue.otch,
kartab_askue.cod_tn,
kartab_askue.cod_st,
t1.data_new,
t1.yearmon
from 
kartab_askue Left JOIN 
(select MAX(kartkvgd_askue.yearmon) As yearmon,
MAX(kartkvgd_askue.data_new) As data_new, 
kartkvgd_askue.lic_sch As lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) As t1 
on kartab_askue.lic_sch=t1.lic_sch
where kartab_askue.del=0
END
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215618
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7так что вы посоветуете с датойКакой-то гибрид надо делать. Какой именно - много от чего зависит.
Например, как изначально предполагалось, в поле DATE хранить первое число месяца. Или в числом поле хранить число формата YYYYMM (например 201604). Или в строковом поле "2016-04". Т.е. вариантов множество.

Заполнять придется или триггером, или тем INSERT-ом, который будет писать данные в таблицу.

olegon7функция обрезания до месяца год(если конечно есть такая в mysql)EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03')
DATE_FORMAT('2009-10-04 22:23:00', '%Y %m')
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39215621
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, у нас в одной из таблиц вообще год и месяц выделены в отдельные числовые поля - тоже вариант.
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216467
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
решил месяц_дату хранить в одном поле в строковом виде

вот ddl таблички
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE `dirty_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_record` date NOT NULL,
  `mon_year` varchar(7) NOT NULL,
  `lic_sch` varchar(16) DEFAULT NULL,
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `kod_st` varchar(8) DEFAULT NULL,
  `kod_tn` varchar(8) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `data_new` int(11) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=196607 DEFAULT CHARSET=utf8;



подскажите автоискремент я правильно задал? 10 знаков? что будет при его переполнении?
mon_year задал 7 знаков максимально возможное 12-2016 так?
как расставить правильно уникальные ключи?
первичный ай-ди так?
предпологается что раз в месяц в таблицу будет падать по 60 тыс записей лиц счеты уникальны в пределе месяца , т е поля mon_year
по таблице вообще куча настроек , например тип таблицы какой правильнее InnoDB?
подскажите новичку уважаемые гуру?
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216469
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
код хранимки
Код: sql
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.
CREATE DEFINER=`Oleg`@`` PROCEDURE `zap`()
BEGIN
INSERT INTO dirty_data(mon_year,date_record,lic_sch,data_kon,date_kon,base,fam,`name`,otch,kod_tn,kod_st,data_new,yearmon)
	select 
DATE_FORMAT(CURRENT_DATE(),'%c-%Y') As mon_year,
now() As date_record,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
kartab_askue.fam,
kartab_askue.`name`,
kartab_askue.otch,
kartab_askue.cod_tn,
kartab_askue.cod_st,
t1.data_new,
t1.yearmon
from 
kartab_askue Left JOIN 
(select MAX(kartkvgd_askue.yearmon) As yearmon,
MAX(kartkvgd_askue.data_new) As data_new, 
kartkvgd_askue.lic_sch As lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) As t1 
on kartab_askue.lic_sch=t1.lic_sch
where kartab_askue.del=0;

END
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216479
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7подскажите автоискремент я правильно задал? 10 знаков? что будет при его переполнении?У целочисленных полей семейства INT число в скобках ничего не означает.
Т.е. unsigned int - это всегда число от 0 до 4294967295.

Посчитайте с какой интенсивностью будут добавляться записи и разделите 4294967295 на нее. Если вдруг полученный срок будет слишком мал для срока жизни системы, то используйте BIGINT. Его хватит точно.
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216480
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7mon_year задал 7 знаков максимально возможное 12-2016 так?Я бы сделал впереди год, а потом месяц. Чтобы порядок строковой сортировки совпадал с натуральным.
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216483
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7как расставить правильно уникальные ключи?(`mon_year`, `lic_sch`)
Либо в обратном порядке, зависит от запросов, которые будут использовать этот индекс.
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216484
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7подскажите автоискремент я правильно задал? 10 знаков? что будет при его переполнении? 2633664
olegon7mon_year задал 7 знаков максимально возможное 12-2016 так?если фиксированная длина, можно просто char(7)
...и вообще, зачем 7, если можно 6? и почему месяц перед годом?
olegon7как расставить правильно уникальные ключи?Что должно быть уникально, на то и делать ключи. В вашем случае это (mon_year,lic_sch). Или в обратном порядке - зависит от того, какие запросы будут к базе.
"AUTO_INCREMENT=196607" - убрать.
olegon7
Код: sql
1.
2.
3.
from 
kartab_askue Left JOIN 
(select 

Шо, опять?! (с)
olegon7
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
MAX(kartkvgd_askue.yearmon) As yearmon,
MAX(kartkvgd_askue.data_new) As data_new, 
kartkvgd_askue.lic_sch As lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch

...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216485
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

спасибо за совет) я думаю надолго хватит))
...
Рейтинг: 0 / 0
как в mysql получить первое число месяца текущего времени
    #39216492
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

запросы будут как правило получить все лицевые счета за такой то месяц

и внутри уже условия where
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как в mysql получить первое число месяца текущего времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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