我在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包通过我从远程位置获取的UserID
和Starttime
参数查询该表。
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
为什么会发生这种情况?如何使响应中的字符串解析才能使查询正常工作?