Skip to content

Using NOW() in custom where? #56

Open

Description

@mswdev

I need to select data where ``last_update >= now() - INTERVAL 1 MINUTE

Example of what I'm currently trying to use:

qb.select('*').where('last_update >= NOW() - INTERVAL 1 MINUTE', null, false).get('account', (err, rows) => {
            qb.release();
            if (err) throw err;
            return res.json(rows)
        })

EDIT: It looks like the issue seems to be occurring due to it placing NOW() inside single quotes when executing the query causing mysql to treat it as a field rather than a function. Any idea how to get around this?

EDIT 2: I realized you can pass false for escape strings which is what I want for executing the NOW() function, but for some reason, it keeps appending the AS keyword after the function? Any idea why this is?

I'm using the query above, but it seems to return this with the AS keyword which is clearly not right?:

ComQueryPacket {
  command: 3,
  sql:
   'SELECT * FROM `account` WHERE last_update >= NOW() AS `- INTERVAL 1 MINUTE`' }

Activity

  1. mswdev commented on May 27, 2019

    @mswdev
    Author
  2. kylefarris commented on Jun 28, 2019

    @kylefarris
    Owner

    Hey @sphiinx, off the top of my head, I'm not sure why it would do that but surely it can be solved. I've been really busy trying to meet a deadline on a big project due mid-July so I haven't been able to answer questions for my open-source projects. I'd be more than happy to accept a PR with the solution, though, as long as it includes a test to go along with it!

  3. rohit-gh commented on Sep 20, 2020

    @rohit-gh

    Hi @mswdev @kylefarris ,
    I know I'm late here. Just ran into the same situation
    Although I was not able to find a substitute for Now()

    I found a workaround using https://momentjs.com/ library as mentioned below

    const moment = require('moment');
    
    qb.select('*').where(`last_update >= '${moment().utc().format('YYYY-MM-DD HH:mm:ss')}' - INTERVAL 1 MINUTE`, null, false).get('account', (err, rows) => {
                qb.release();
                if (err) throw err;
                return res.json(rows)
            })
    
    

    .format('YYYY-MM-DD HH:mm:ss')} is important here as this is the format of the timestamp that is being saved in DB and used for querying.

    also note I added .utc() , please change this if you have a different configured timezone

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions