我有两张桌子,
details
id integer primary key
onsetdate Date
questionnaires
id integer primary key
patient_id integer foreign key
questdate Character Varying
是否可以在这两个表上创建一个执行JOIN的SELECT语句,按照从startdate和questdate的比较得到的最早日期排序(例如,可以将questdate强制转换为Date字段来执行此操作?)
questdate的典型格式为“2009-04-22”
实际的表有一个encyrpted BYTEA字段用于开始日期 - 但是我将把这个部分留到以后(使用'ezcrypto'在RoR中编写应用程序来加密BYTEA字段)。
答案 0 :(得分:4)
类似
SELECT...
FROM details d
JOIN quesionnaires q ON d.id=q.id
ORDER BY LEAST (decrypt_me(onsetdate), questdate::DATE)
可能?我不确定'id'的含义,如果你想通过它或其他东西加入
顺便说一下,你可以省略显式的演员表,毕竟它是ISO格式的。 我想你知道用什么代替decrypt_me()
答案 1 :(得分:1)
postgres中有一个日期解析功能:http://www.postgresql.org/docs/9.0/interactive/functions-formatting.html
查找to_timestamp函数。
答案 2 :(得分:1)
PostgreSQL支持标准的SQL CAST()函数。 (还有其他几个。)所以你可以使用
CAST (questdate AS DATE)
只要“questdate”列中的所有值都计算为有效日期。但是,如果这个数据库已经生产了一段时间,那是不太可能的。并非不可能,但不太可能。