Mirth Connect SQL Server Error : Conversion failed when converting date and/or time from character string
Mirth Connect SQL Server Error : Conversion failed when converting date and/or time from character string
我正在尝试插入 SQL 服务器日期时间字段。尝试一个 table 的简单场景,仅具有名为 start_date 的日期时间列。
我正在尝试的查询是
INSERT INTO test (start_date) values (${start_date})
start_date 是 java.util.Date 类型的 channelMap 变量,创建时使用:
var start_date = DateUtil.getDate('yyyyMMddHHmmss', msg['date'].toString());
这里的start_date是java.util.Date的,为什么mirth在尝试插入数据库的时候把它当作字符串处理??
我相信您的数据是作为 '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.Datatype我的数据库是 DateTime 类型。
getDate
函数 returns 一个 java.util.Date 对象,但是当我尝试使用 getCurrentDate
函数时,它 returns 一个格式化的字符串。我想格式化日期对象是将数据插入数据库的一种方式。
您甚至可以在 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
第二种方法
如果您仍想使用 util,请尝试以下操作
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);
}
我正在尝试插入 SQL 服务器日期时间字段。尝试一个 table 的简单场景,仅具有名为 start_date 的日期时间列。
我正在尝试的查询是
INSERT INTO test (start_date) values (${start_date})
start_date 是 java.util.Date 类型的 channelMap 变量,创建时使用:
var start_date = DateUtil.getDate('yyyyMMddHHmmss', msg['date'].toString());
这里的start_date是java.util.Date的,为什么mirth在尝试插入数据库的时候把它当作字符串处理??
我相信您的数据是作为 '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.Datatype我的数据库是 DateTime 类型。
getDate
函数 returns 一个 java.util.Date 对象,但是当我尝试使用 getCurrentDate
函数时,它 returns 一个格式化的字符串。我想格式化日期对象是将数据插入数据库的一种方式。
您甚至可以在 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
第二种方法
如果您仍想使用 util,请尝试以下操作
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);
}