Sql 为什么我的基于日期的WHERE条款失败了?

Sql 为什么我的基于日期的WHERE条款失败了?,sql,node.js,Sql,Node.js,我使用node.js连接到SQL数据库SQL Server 2016。我的表名为transactionCounts,具有以下表和数据类型: 职员id:varchar50,日期:日期,计数:整数 为清楚起见,“日期”字段只是一个日期,而不是日期时间。记录如下:2017-08-07 我正在使用mssql包,constSQL=require'mssql' 基本上,我有一个函数,它接受一个开始日期和一个结束日期,并对它们进行处理: function(start, end) { let ps =

我使用node.js连接到SQL数据库SQL Server 2016。我的表名为transactionCounts,具有以下表和数据类型:

职员id:varchar50,日期:日期,计数:整数

为清楚起见,“日期”字段只是一个日期,而不是日期时间。记录如下:2017-08-07

我正在使用mssql包,constSQL=require'mssql'

基本上,我有一个函数,它接受一个开始日期和一个结束日期,并对它们进行处理:

function(start, end) {

    let ps = new sql.PreparedStatement(transactionRegisterSqlPool);

    ps.input('start', sql.Date);
    ps.input('end', sql.Date);

    ps.prepare('SELECT staff_id, SUM(Count) TotalCount FROM [TransactionRegister].[dbo].[transactionCounts] ' +
        'WHERE date >= @start AND date < @end GROUP BY staff_id', err => {
            .execute({start: start, end: end}, (err, result) => {});
        });
};

但似乎…把我的约会日期变成字符串来解决这个问题是错误的。处理Javascript日期和SQL日期之间的日期的正确方法是什么,以避免这种明显的夏令时问题?

您的问题是Javascript没有日期类型,只有datetime,而SQL有日期类型。因此,您必须进行转换

如果将其包装在函数中,它仍然是可读的:

function toDateString(d) {
   return `${d.getFullYear()}/${d.getMonth() + 1}/${d.getDate()}`; 
}

ps.prepare('SELECT staff_id, SUM(Count) TotalCount FROM [TransactionRegister].[dbo].[transactionCounts] ' +
    'WHERE date >= @start AND date < @end GROUP BY staff_id', err => {
        ps.execute({start: toDateString(start), end: toDateString(end)}, (err, result) => {});
    });

您的问题是JavaScript没有日期类型,只有datetime,而SQL有日期类型。因此,您必须进行转换。@BartFriederichs所以您认为我进行上述字符串转换的方式可能是最好的方法?你会那样做吗?我可能会那样做是的,可能会用函数包装它。您也可以在执行调用中调用该函数。如果不久之后没有人提供更干净的方法,@BartFriederichs,请添加您的答案,我会将其标记为正确。谢谢你的帮助:。我仍然在祈祷,mssql库的一部分是JS DateTime->SQL日期转换,我希望使用它,但如果不是,您的答案就可以了。
function toDateString(d) {
   return `${d.getFullYear()}/${d.getMonth() + 1}/${d.getDate()}`; 
}

ps.prepare('SELECT staff_id, SUM(Count) TotalCount FROM [TransactionRegister].[dbo].[transactionCounts] ' +
    'WHERE date >= @start AND date < @end GROUP BY staff_id', err => {
        ps.execute({start: toDateString(start), end: toDateString(end)}, (err, result) => {});
    });