了解Oracle的to_date / to_char

时间:2014-07-01 03:31:10

标签: sql oracle

所以我正在为自己做一些练习,并且我已经按照这个指示给自己:(我在医院里使用他们的测试数据库) 显示器:

  1. Lname, Fname, Mname, Birth_date, Chief_Complaint, DTTM_ADM(日期/时间入场)
  2. 然后我的搜索只会在DTTM_ADM 20082010
  3. 之间进行搜索
  4. 主要投诉将由用户手动输入。
  5. 我知道如何显示我给自己的第一条和第二条指令,但我很难做第二条指令。我不太了解SQL及其他功能(这就是为什么我这样做,要学习)。

    我的导师告诉我执行函数to_char来解决我的#2指令。因为我只是在几年之间限制我的搜索(在他们的系统中它就像01-JUL-14)。

    所以我的问题是,如何以一种方式执行to_char或to_date我只需要指示我的搜索只会在几年内没有一天和一个月的限制(而不是说sql {{ 1}},它只是01-JUL-14

    2014)

    我该如何正确地做到这一点? (当你对某个网站的访问权限有限且网络速度非常慢时,OJT很难做到)

4 个答案:

答案 0 :(得分:1)

您可以通过2种方法完成此操作,

  1. 您可以使用TO_CHAR进行年度比较,如下所示:

    PATIENT_ADM A, PATIENT_ADM B TO_CHAR(A.DTTM_ADM,'YYYY') > '2008' AND TO_CHAR(B.DTTM_ADM, 'YYYY') < '2010'

    解释,To_Char用于将日期转换为特定字符串格式,例如仅限日期,仅限月份,仅年份,仅限小时或日期月份年份,小时秒等。请参阅文档链接答案。

  2. 您可以使用EXTRACT选项进行年度比较,如下所示

    PATIENT_ADM A, PATIENT_ADM B EXTRACT(YEAR FROM A.DTTM_ADM) > 2008 AND EXTRACT(YEAR FROM B.DTTM_ADM) < 2010

    说明:提取用于从日期字段中提取特定日期/时间部分值。当您的数据库具有大量数据时,这尤其有用,因为与EXTRACT相比,TO_CHAR的操作成本稍高。请参阅随附的源文件。

答案 1 :(得分:0)

尝试这样的WHERE子句:

WHERE A.DTTM_ADM >= TO_DATE('01-JAN-2008', 'DD-MON-YYYY') AND
      A.DTTM_ADM <  TO_DATE('01-JAN-2011', 'DD-MON-YYYY')

一些注意事项: -

  • 我假设DTTM_ADM的类型为DATE
  • 另一种方法是在TO_CHAR上使用DTTM_ADM,但这会使该列上的索引无法被Oracle使用
  • 第一个条件是大于或等于,因为有人在2008年1月1日午夜才被录取。
  • 第二个条件是小于,所以如果有人在2011年1月1日的午夜被录取,则他们不包括在结果中

答案 2 :(得分:0)

我将在你的where子句中使用extract()

EXTRACT()从时间戳类型或日期中提取并返回年,月,日,小时,分钟,秒或时区。

SELECT *
FROM PATIENT_ADM A, PATIENT_ADM
WHERE EXTRACT(YEAR FROM A.DTTM_ADM) > 2008
AND EXTRACT(YEAR FROM B.DTTM_ADM) < 2010;

答案 3 :(得分:0)

首先找出DTTM_ADM是类型为date还是类型为varchar2或char的字符类型。这应该是一个日期,但正如你所说&#34;在他们的系统中它就像01-JUL-14&#34;,他们可以将它存储在一个字符串中。

函数to_char适用于日期。 to_char(DTTM_ADM,&#39; yyyy&#39;)会给你一年的字符串(例如&#39; 2009&#39;)。

如果DTTM_ADM恰好是字符串类型,那么to_char是没用的。您需要字符串函数SUBSTR来获取保存年份的子字符串。