On Thu, Feb 24, 2022 at 3:47 PM Tim Tilberg <ttilb...@gmail.com> wrote:

> Today I was scripting out some DB maintenance tasks on SQL Server, and was
> leveraging a query similar to:
>
> SELECT DISTINCT create_ts
> FROM #{table}
> WHERE create_ts < DATEADD(MONTH, -2, GETDATE())
>
> I initially thought "Hey, what does this look like with virtual row
> blocks, avoiding interpolation?
>
> DB[:a_table].distinct.select(:create_ts)
>   .where { create_ts < dateadd(month, -2, getdate()) }
>
> I found that dateadd() was being parsed as a sql function call, but that
> getdate() was being treated as an identifier.
>
> [17] pry(main)> DB[:a_table].distinct.select(:create_ts).where { create_ts
> < dateadd(month, -2, getdate()) }.sql
> => "SELECT DISTINCT [CREATE_TS] FROM [a_table] WHERE ([CREATE_TS] <
> dateadd([MONTH], -2, *[GETDATE]*))"
>
> In this case, I was able to just use Ruby's `Date.today` rather than SQL's
> GETDATE(). I'm trying to improve my understanding of virtual row blocks,
> and was curious if there was a quick fix for this, or if it needs to drop
> into `Sequel.lit` or `Sequel.function` syntax.
>

This isn't because it is nested (nested functions work fine), it's because
you didn't provide an argument.   From a virtual row perspective, modulo
having getdate as a local variable in scope, getdate and getdate() are the
same.  You should use getdate.function instead of getdate().

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sequel-talk+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sequel-talk/CADGZSSejYZXW8E1OTEXbmEc%3DYX_OuYq8BhfsaBSnyEB7qNddQA%40mail.gmail.com.

Reply via email to