带日期的 SQL 查询在节点 mssql

问题描述

我使用的是节点 mssql 的 v6.3.1。 我的查询包括多个日期类型的列。 在节点 mssql 中,所有日期列的输出格式为:2020-10-20T00:00:00.000Z 当我在 Azure Data Studio 中进行相同的查询时,我得到:2020-10-20

我的问题是当我使用 YYYY-MM-DD 格式时出现错误时需要更新数据库。 有没有一种方法可以更新数据库而不必检查每个字段是否为日期,然后向其中添加“0T00:00:00.000Z”?

当前代码是这样的:

// 在服务器启动时运行

const sql = require('mssql')

const poolPromise = sql.connect({
  server: process.env.sql_SERVER,user: process.env.sql_USER,password: process.env.sql_PASSWORD,database: process.env.sql_DATABASE
})

// 在查询时运行

async function updatesqlRecord(fields) {
// Adding fields below for demonstration
  let fields = {id: 1,name: 'test',date: '2020-10-12' }

  let database = process.env.sql_DATABASE
  let table = 'Test'
  let querystring = `UPDATE [${database}].[dbo].[${table}] SET `

  Object.entries(fields).forEach(field => {
    const [key,value] = field;
    querystring += `${key} = '${value}',`
  });

  querystring = querystring.slice(0,-2)
  querystring += ` WHERE projektNr = ${fields.projektNr}`
  try {
    let pool = await poolPromise
    let result = await pool.request()
      // .input('projektNr',sql.Int,value)
      .query(querystring)
    console.log(result)
    return result.rowsAffected
  } catch (err) {
      console.log('sql request Error',err)
  }

}

解决方法

如果可能,您可以尝试在将日期添加到数据库之前使用 moment.js 来解析日期

var moment = require('moment');
...
var formatedDate = moment(myDate).format('YYYY/MM/DD HH:MM:SS').toISOString();