无法使用nodejs-mssql按日期时间列查询MSSQL表

时间:2019-05-21 12:58:20

标签: javascript node.js sql-server datetime

我在MSSQL数据库中有一个表:

CREATE TABLE Test (
    ID int NOT NULL IDENTITY(1,1),
    UserID int NULL,
    Starttime datetime NULL
);
ALTER TABLE Test ADD CONSTRAINT PK_Test PRIMARY KEY (ID);

INSERT INTO Test (UserID, Starttime) VALUES (1, '2019-01-01 01:01:01.000');

并且我正在尝试使用NodeJS mssql包通过我从远程位置获取的UserIDStarttime参数查询该表。

来自远程位置的

UserID参数是一个整数,而Starttime是一个已编码的URI字符串-2019-01-01T01%3A01%3A01

如果我使用硬编码的Starttime值查询表,则一切正常,但是当我尝试从远程响应中使用Starttime并使用decodeURIComponent()对其进行解码时,我的查询将响应0结果:

const userID = response.user_id;  // userID -> 1
const dateFromResponse = response.start_time;  // dateFromResponse -> '2019-01-01T01%3A01%3A01'
const start1 = new Date('2019-01-01T01:01:01');
const start2 = new Date(decodeURIComponent(dateFromResponse));
// (decodeURIComponent(dateFromResponse) === '2019-01-01T01:01:01') ---> true
// (start1.valueOf() === start2.valueOf()) ---> true
// (start1.toISOString() === start2.toISOString()) ---> true

const test = await mssqlRequest
  .input('UserID', sql.Int, userID)
  .input('Starttime', sql.DateTime2, start1)
  .query('SELECT * FROM Test WHERE UserID = @UserID AND Starttime = @Starttime');
const l = test.recordset.length;  // results in 1


const test2 = await mssqlRequest
  .input('UserID', sql.Int, userID)
  .input('Starttime', sql.DateTime2, start2)
  .query('SELECT * FROM Test WHERE UserID = @UserID AND Starttime = @Starttime');
const l2 = test2.recordset.length;  // results in 0

为什么会发生这种情况?如何使响应中的字符串解析才能使查询正常工作?

0 个答案:

没有答案