Javascript 为什么同一个SQL查询在SQL Developer和代码中会返回不同的结果?

Javascript 为什么同一个SQL查询在SQL Developer和代码中会返回不同的结果?,javascript,sql,oracle,knex.js,objection.js,Javascript,Sql,Oracle,Knex.js,Objection.js,我在我的应用程序中有一个查询,它应该返回所有今天或更早到期但尚未发送通知的调查。查询如下所示: select "surveys".* from "surveys" where "reminder_count" = 0 and trunc("date") <= to_date(CURRENT_DATE, 'YY-MM-DD') 如你所见,第一个条目的日期是昨天,第二个条目的日期是几周前。因此,查询应该只返回第一行。当我直接在SQLDeveloper中执行它时,它就是这样做

我在我的应用程序中有一个查询,它应该返回所有今天或更早到期但尚未发送通知的调查。查询如下所示:

select "surveys".* from "surveys" 
    where "reminder_count" = 0 and
    trunc("date") <= to_date(CURRENT_DATE, 'YY-MM-DD')
如你所见,第一个条目的日期是昨天,第二个条目的日期是几周前。因此,查询应该只返回第一行。当我直接在SQLDeveloper中执行它时,它就是这样做的

但是,当我在代码中使用它时(带有objective.js和Knex的Javascript),它会忽略date子句并返回两行

以下是我使用的代码:

const surveysDue = await Survey.query()
  .where({reminderCount: 0})
  .where(raw('trunc("date")'), '<=', raw('to_date(CURRENT_DATE, \'YY-MM-DD\')'))
const surveysDue=wait Survey.query()
.where({rementercount:0})
.其中(原始('trunc(“日期”)),'Problem
由于某种原因,SQL Developer中的当前日期是正确的(18-06-19),但是,当通过代码查询时,它会在一年后的今天返回(19-06-19)。因此它会返回两行,因为它们都在2018年

解决方案 我会试图找出日期错误的原因,但这可能会花费太多时间,在Oracle中处理日期从来都不是一项简单的任务……因此我只是用自己生成的JS date实例替换了
CURRENT_date

const surveysDue = await Survey.query()
  .where({reminderCount: 0})
  .where(raw('trunc("date")'), '<=', moment().toDate())
const surveysDue=wait Survey.query()
.where({rementercount:0})

.where(raw('trunc(“date”)),'CURRENT_date返回日期数据类型;将_date函数应用于它是错误的(因此将其删除)。这并不重要,但-在Oracle中使用小写或混合大小写创建对象(即将它们括在双引号中)这意味着头痛。如果我是你,我会避免它。@Littlefoot感谢返回类型提示。不过,它不会改变查询的任何内容:TO_DATE只返回相同的对象。就小写对象名称而言,这只是出于美观的原因:它在JS代码中看起来很难看,这是仅使用这些标识符的地方,非常罕见任何人都需要直接查询数据库并不重要;to_DATE+CURRENT_DATE完全是错误的。我已经看到您解决了这个问题;我很高兴您能够这样做。返回的日期没有错,可能是您的应用程序主机的时钟或NLS_设置没有正确设置。@KaushikNayak主机时钟肯定设置正确,因为y代码返回正确的日期。是否为每个会话或每个服务器设置NLS_设置?
{ method: 'select',
  options: {},
  timeout: false,
  cancelOnTimeout: false,
  bindings: [ 0 ],
  __knexQueryUid: '2a22ccb5-4763-42d3-bf0a-6ea95a7b9c7e',
  sql:
   'select "surveys".* from "surveys" where "reminder_count" = ? and trunc("date") <= to_date(CURRENT_DATE, \'YY-MM-DD\')' }
const surveysDue = await Survey.query()
  .where({reminderCount: 0})
  .where(raw('trunc("date")'), '<=', moment().toDate())