【问题标题】:Using dates when querying MSSQL from node.js从 node.js 查询 MSSQL 时使用日期
【发布时间】:2019-07-03 19:30:27
【问题描述】:

我正在尝试从 node.js 查询 MSSQL,并且查询涉及日期。

我这样设置查询日期:

var datoen = new Date();
datoen.setHours(2,0,0,0);

首先 - 在我的服务器上,这会注销为: 2019-07-03T00:00:00.000Z

为什么不注销为:2019-07-03T02:00:00.000Z?

无论如何 - 这不是真正的问题。这是我想要的第一个日期格式,它与数据库中的格式相同。

但是当我运行这个查询时(使用来自 npm 的 mssql):

request.query('select * from tblPriceRooms where 
BarDate = ' + datoen, function (err, recordset) {
        if (err) console.log(err)
        res.send(recordset)

...服务器提供此错误-->

     info:
  { number: 102,
    state: 1,
    class: 15,
    message: 'Incorrect syntax near \'Jul\'.',
    serverName: 'SERVERNAME\\SQLEXPRESS',
    procName: '',
    lineNumber: 1,
    name: 'ERROR',
    event: 'errorMessage' } },
    name: 'RequestError',
    precedingErrors: [] }

我知道连接工作正常。只要我不尝试根据日期进行查询 - 我会得到世界上所有的结果。

我是个新手,有时约会会让我头疼。任何指针将不胜感激!

【问题讨论】:

  • 不要注入你的价值,参数化你的查询;那么您的值将作为日期/时间数据类型传递,并将被正确解析。
  • 因为您设置了 local 小时并且时间戳是 UTC,所以大概您的系统设置为 +0200。试试datoen.setUTCHours(2,0,0,0)。 ;-)
  • 这是“简单”@Larnu 吗?我打算弄清楚如何进行参数化 - 一旦我完成了基本查询:-) 我想我将不得不直接跳进去。非常感谢!

标签: javascript node.js sql-server


【解决方案1】:

我建议对查询使用参数,您可以从这种方法中获得很多好处。这应该适合你:

// Put whatever date you wish here..
const date = new Date();
date.setUTCHours(2, 0, 0, 0);
request.query('select * from tblPriceRooms where BarDate > @date', (err, result) => {
    if (err) {
        console.error("Error occurred: ", err);
    } else {
        console.info("Rows: ", result);
    }
}).input('date', sql.DateTime, date); // Add the date parameter here

【讨论】:

  • 是的,Terry Lennox - 这几乎成功了 :-) 谢谢一百万!
  • 太好了,很高兴听到它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2016-09-25
  • 2022-10-01
相关资源
最近更新 更多