2015-09-14 19 views
5

Ho bisogno di creare una query in Arel che abbia precedentemente un'operazione CAST. La query originale era: seleziona * da tablename dove tablename.anniversary> = CAST (STR_TO_DATE (?, '% D-% m-% Y-% k-% i-% s') come DATETIME)Operazione CAST Arel Query

(il punto di domanda è sostituito dal data effettiva in ulteriore codice)

Per la cui condizione, sto facendo questo:

where(tablename['anniversary'] 
         .gteq("CAST(STR_TO_DATE(#{date_value},'%d-%m-%Y %k:%i') as DATETIME)")) 

la query finale risultante che dovrei ottenere dovrebbe avere: tablename.anniversary> = '2015-07-13 16:12:00'

Bu t I get:

tablename.anniversary >= 'CAST(STR_TO_DATE(13-09-2015 05:33PM,\'%d-%m-%Y %k:%i\') as DATETIME)' 

Cosa sto sbagliando?

risposta

3

io non sono sicuro che capito la tua domanda, ma ...

Primo perché non basta usare Rubino datetime formating ?
Ma se questa data è una colonna:

Arel::Nodes::NamedFunction.new('CAST', [Model.arel_table[:column_name].as(Arel::Nodes::Quoted.new('DATETIME'))]) 
+0

Arel :: :: I nodi quotati ('DATETIME') non sembra funzionare, dice che è undefined –

+0

modifico, grazie. È Arel :: Nodes :: Quoted.new ('DATETIME'), ma se funziona dipende dal tuo DB. –