将字符变化字段转换为日期

时间:2011-01-21 11:44:09

标签: postgresql

我有两张桌子,

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字段)。

3 个答案:

答案 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”列中的所有值都计算为有效日期。但是,如果这个数据库已经生产了一段时间,那是不太可能的。并非不可能,但不太可能。