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
Функция возвращает форматированную строку. Я предполагаю, что форматирование объекта даты - один из способов вставки данных в БД.