2016-10-07 3 views
1
  • ОС: Linux (Lubuntu)
  • язык: Javascript (Node JS)
  • рамки: экспресс-JS
  • База данных: MySQL
  • "данные" есть поле Дата от " activitat»стол

Когда я запускаю следующий оператор с помощью Sequelize.jssequelize где пункт дата

models.TblActivitat.findAll(
       { 
        attributes: 
        [ 
         'codiAct', 'procedencia', 'pacient', 'proces', 'prova', 'rmn', 'realitzador', 
         [Sequelize.fn('date_format', Sequelize.col('data'), '%d-%m-%Y'), 'data'] 
        ], 
        include: models.TblTecnics, 
        where: {"data": '2016-10-20' }, //dataAAAAMMDD 
        order: "registre DESC" 
       }).then(function(tblActTec){ 
        ... 
       }); 

... Я должен был бы получить некоторые записи, но я не получаю ничего

работает на MySQL Я получаю результат:
MySQL> выберите данные из activitat где данные = «2016-10-20»;
+ ------------ +
| данные |
+ ------------ +
| 2016-10-20 |
| 2016-10-20 |
| 2016-10-20 |
| 2016-10-20 |
+ ------------ +

Если я вижу консоль сервера Node. Когда выполняется предварительный выпуск, он показывает следующее:

Выполнение (по умолчанию): SELECT activitat. codiActactivitat. procedencia, activitat. pacient, activitat. proces, activitat. prova, activitat. rmn, activitat. realitzador, date_format (data, '% d-% m-% Y') AS data, tecnic. codiTec AS tecnic.codiTec, tecnic. nom AS tecnic.nom ОТ activitat AS activitat ВЛЕВО ВЗАИМОДЕЙСТВИЕ tecnics AS tecnic ON activitat. realitzador = tecnic. codiTec ГДЕ activitat. data = '2016-10-19 22:00:00'
ORDER BY registre DESC;

мой вопрос:
Я написал «2016-10-20» в качестве предложения where. Когда я это делаю в mysql, он показывает результаты, на которые я надеюсь, но когда выполняется сиквелза, он изменяет значение предложения данных на «2016-10-19 22:00:00» (за два часа до «2016-10-20 00: 00:00" !!). Зачем?

Я помню, что поле «данные» является поле Date (не поле DateTime)

Спасибо очень очень много !!

ответ

1

Я обнаружил новый тип поля, когда вы определяете поля таблицы в Sequelize. Это тип DATAONLY (вместо типа DATA). Таким образом, определение поля следующим образом:

 data: 
     { 
      type: DataTypes.DATEONLY, 
      validate: 
      { 
       notEmpty: 
       { 
        msg: "-> Falta data" 
       } 
      } 
     }, 

С этим типом файла (DataOnly) он рассматривает только де часть даты (не время часть)

2

Sequelize преобразует строку, которую вы передаете, в объект Date, у которого есть назначенное ему время.Если вы хотите выбрать записи на определенную дату (а не в точное время), вы можете сделать это так:

date: { 
    $lt: new Date('2016-10-20'), 
    $gt: new Date(new Date('2016-10-20') - 24 * 60 * 60 * 1000) 
} 

Или в вашем случае:

models.TblActivitat.findAll(
      { 
       attributes: 
       [ 
        'codiAct', 'procedencia', 'pacient', 'proces', 'prova', 'rmn', 'realitzador', 
        [Sequelize.fn('date_format', Sequelize.col('data'), '%d-%m-%Y'), 'data'] 
       ], 
       include: models.TblTecnics, 
       where: {"data": { 
        $lt: new Date('2016-10-20'), 
        $gt: new Date(new Date('2016-10-20') - 24 * 60 * 60 * 1000) 
       } }, //dataAAAAMMDD 
       order: "registre DESC" 
      }).then(function(tblActTec){ 
       ... 
      }); 
Смежные вопросы