# database agnostic sql possible?

**URL:** <https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437>\
**Category:** rubyonrails-talk\
**Created:** [March 17, 2008, 1:54pm UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437 "2008-03-17T13:54:05Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![gsterndale](https://avatars.discourse-cdn.com/v4/letter/g/4bbf92/32.png) [@gsterndale](https://discuss.rubyonrails.org/u/gsterndale)\
**Post date:** [March 17, 2008, 1:54pm UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437/1 "2008-03-17T13:54:05Z")

</div>

I'd like to have database agnostic code, however I have been unsuccessful writing conditions that work for both postgres and mysql for the following:

# postgres only conditions = ["curtain\_at + CAST (CAST (duration AS VARCHAR) || ' SECOND' AS INTERVAL) \>= ? AND curtain\_at \< ?", Time.now, Time.now + 2.hours]

# MySQL only conditions = ["curtain\_at + INTERVAL duration SECOND \>= ? and curtain\_at \< ?", Time.now, Time.now + 2.hours]

Concert.find(:all, :conditions =\> conditions)

Can anyone lend some SQL expertise?

As a last resort, how can I determine what the current database is so I can selectively set conditions?

---

<div class="post-metadata">

**Author:** ![gsterndale](https://avatars.discourse-cdn.com/v4/letter/g/4bbf92/32.png) [@gsterndale](https://discuss.rubyonrails.org/u/gsterndale)\
**Post date:** [March 17, 2008, 9:58pm UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437/2 "2008-03-17T21:58:21Z")

</div>

bump

---

<div class="post-metadata">

**Author:** ![11175](https://avatars.discourse-cdn.com/v4/letter/1/8edcca/32.png) [@11175](https://discuss.rubyonrails.org/u/11175)\
**Post date:** [March 18, 2008, 1:58am UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437/3 "2008-03-18T01:58:08Z")

</div>

gsterndale wrote:

> bump

Does this work?

:conditions =\> ["curtain\_at between ? and ?", Time.now.to\_s(:db), 2.hours.from\_now.to\_s(:db)]

hth

ilan

---

<div class="post-metadata">

**Author:** ![David\_A\_Black](https://avatars.discourse-cdn.com/v4/letter/d/dbc845/32.png) [@David\_A\_Black](https://discuss.rubyonrails.org/u/David_A_Black)\
**Post date:** [March 18, 2008, 3:00am UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437/4 "2008-03-18T03:00:47Z")

</div>

Hi --

---

<div class="post-metadata">

**Author:** ![gsterndale](https://avatars.discourse-cdn.com/v4/letter/g/4bbf92/32.png) [@gsterndale](https://discuss.rubyonrails.org/u/gsterndale)\
**Post date:** [March 18, 2008, 1:41pm UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437/5 "2008-03-18T13:41:44Z")

</div>

Thanks Ilan and David. While "between" does look like a more elegant solution that the one I posted, the real problem seems to be in adding an integer (cast as an interval) to a datetime in both postgres and mysql.

I need to compare two time spans, not just a time and a time span. Hence, the duration column.

Thanks again!

---

<div class="post-metadata">

**Author:** ![gsterndale](https://avatars.discourse-cdn.com/v4/letter/g/4bbf92/32.png) [@gsterndale](https://discuss.rubyonrails.org/u/gsterndale)\
**Post date:** [March 18, 2008, 7:49pm UTC](https://discuss.rubyonrails.org/t/database-agnostic-sql-possible/26437/6 "2008-03-18T19:49:14Z")

</div>

bump
