尝试将nvarchar转换为日期mssql节点js时发生错误

时间:2019-11-24 10:33:09

标签: sql node.js sql-server database

我正在尝试使用mssql模块从节点js查询SQL Server。数据库中的日期格式为dd/mm/yyyy hh:mm:ss。该查询在SQL Server Management Studio中运行正常,但是在node.js中使用时会产生以下错误:

the error generated

代码如下:

//This query aims to retrieve the records that have been inserted to the database in the last 5 min 
var sq = "SELECT * FROM [ofm1].[dbo].[ass_site] WHERE CONVERT(datetime, date1) > DATEADD(MINUTE, -5, GETDATE());"

conn = new mssql.ConnectionPool(dbConfig);

conn.connect().then(function () {
    var request = new mssql.Request(conn);

    request.query(sq).then(function (recordSet) {
         recordSet  = recordSet.recordset;
         recordSet = JSON.stringify(recordSet)
         recordSet = JSON.parse(recordSet)

         recordSet.forEach(function(row) {
             console.log("row:nevr:  "  + row.nevr)
             console.log("row:group id "  + row.codeass)

             var rq = new mssql.Request(conn);
             rq.input('id', mssql.NChar, row.nevr)
             rq.input('group', mssql.NChar, row.codeass)
             rq.input('feedback', mssql.Text, "new ticket !")
             rq.input('url', mssql.NChar, "")
             rq.input('notified', mssql.TinyInt, 0)

             rq.query("INSERT INTO [ofm1].[dbo].[ticket] values (@id, @group, @feedback, @url, @notified);").then(function() {
             });
        });

       /* console.log(recordSet);
       console.log("description: " + recordSet.name);*/
       // conn.close();
    }).catch(function (err) {
       console.log(err);
       conn.close();
    });
}).catch(function (err) {
    console.log(err);
});

任何帮助将不胜感激,非常感谢!

1 个答案:

答案 0 :(得分:2)

通常,尝试转换格式不正确的日期时会发生此错误

例如,尝试使用dd / mm / yyyy格式转换格式为mm / dd / yyyy的日期

SELECT  CONVERT(datetime, '06/18/2018 12:05:23',103) 

结果:

  

将varchar数据类型转换为datetime数据类型   值超出范围。

但是如果格式正确,请按照以下说明操作

SELECT  CONVERT(datetime, '18/06/2018 12:05:23',103) 

结果:

  

2018-06-18 12:05:23.000

将您的日期格式代码指定为103,以匹配您的日期格式dd/mm/yyyy,如下所示:

//This query aims to retrieve the records that have been inserted to the database in the last 5 min 
var sq = "SELECT * FROM [ofm1].[dbo].[ass_site] WHERE CONVERT(datetime, date1,103) > DATEADD(MINUTE, -5, GETDATE());"

有关格式代码的更多详细信息,请检查link