Mirth Connect SQL Server Ошибка: сбой при преобразовании даты и / или времени из символьной строки

Я пытаюсь вставить в поле DateTime SQL Server. Попытка простого сценария для одной таблицы, имеющей столбец datetime с именем start_date.

Запрос я пытаюсь это

INSERT INTO test (start_date) values (${start_date})

start_date - переменная channelMap типа java.util.Date, она была создана с использованием:

var start_date = DateUtil.getDate('yyyyMMddHHmmss', msg['date'].toString());

Здесь start_date имеет значение java.util.Date, почему mirth рассматривает его как String, когда он пытается вставить в базу данных??

2 ответа

Решение

Вы можете обработать преобразование даже в SQL. Надеюсь, поможет

var start_date = msg['PID']['PID.7']['PID.7.1'].toString(); // 19831123 - YYYYMMDD format
try {
  sql="INSERT INTO test (start_date) values (convert(datetime,'" + start_date + "',5))";
  logger.info(sql);
  rst = dbConn.executeUpdate(sql);  
}
catch(err) {
  logger.info('ERR: ' + err);
}

Выход в БД будет ниже.

select * from test
start_date |
----------
1983-11-23 00:00:00.000

2-й подход

Если вы все еще хотите использовать утилиту, попробуйте ниже

var start_date = msg['PID']['PID.7']['PID.7.1'].toString(); // 19831123 - YYYYMMDD format
/* 
Input is yyyyMMdd and 
output is yyyyMMddHHmmss format
*/
var datestring = DateUtil.convertDate('yyyyMMdd', 'yyyyMMddHHmmss', start_date); 
try {
  sql="INSERT INTO test (start_date) values ('" + start_date + "')";
  logger.info(sql);
  rst = dbConn.executeUpdate(sql);  
}
catch(err) {
  logger.info('ERR: ' + err);
}

Я считаю, что ваши данные вставляются в БД как 'Mon Feb 19 09:25:16 IST 1968' вместе с цитатами.

Я использовал функцию formatDate, но данные, вставленные в БД, будут 1968-02-19 09:25:16

var pidDate = msg['PID']['PID.7']['PID.7.1'].toString();
var value = DateUtil.getDate("yyyyMMddHHmmss",pidDate);
var data = DateUtil.formatDate("yyyyMMddHHmmss", value)
channelMap.put("start_date",data);

Вставка в БД:

    var dateValue = $('start_date')
    dbConn = DatabaseConnectionFactory.createDatabaseConnection(dbDriver, dbAddress, userName,passwd);
    result = dbConn.executeUpdate("INSERT INTO test (startdate) values ('"+dateValue+"')");

Я отправляю значение даты как 19680219092516, внутри значения БД - 1968-02-19 09:25:16. Тип данных моей БД - тип DateTime.

getDate функция возвращает объект java.util.Date, но когда я пытался с getCurrentDate Функция возвращает форматированную строку. Я предполагаю, что форматирование объекта даты - один из способов вставки данных в БД.

Другие вопросы по тегам