[英]Understanding Oracle's to_date / to_char
因此,我正在为自己做一些练习,并按照以下说明为自己提供了一种状态:(我在医院使用他们的测试数据库)显示:
Lname, Fname, Mname, Birth_date, Chief_Complaint, DTTM_ADM
(日期/时间允许) 2008
和2010
DTTM_ADM
之间 我知道如何显示我给自己的第一条和第二条指令,但是我很难执行第二条指令。 我对SQL及其其他功能了解不多(这就是为什么要这样做的原因,以供学习)。
我的老师告诉我执行to_char
函数来解决我的#2指令。 由于我只是在几年之间限制搜索(在他们的系统中,就像01-JUL-14
)。
所以我的问题是,如何以一种我只需要指示我的搜索方式来进行to_char或to_date操作,就只能以年为单位,并且没有沿限制的日期和月份(而不是说sql 01-JUL-14
,那将是2014)
?
Table:
PATIENT_ADM A,
PATIENT_ADM B
A.DTTM_ADM > 2008
B.DTTM_ADM < 2010
如何正确执行此操作? (当您只能有限地访问某些网站并且网速非常慢时,很难进行OJT)
您可以通过2种方法来做到这一点,
您可以使用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用于将日期转换为特定的字符串格式,例如,仅日期,仅月份,仅年份,仅小时或带有日期秒的年月年等。请参考文档链接中的答案。
您可以使用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的操作成本稍高。 请参阅随附的原始文件。
试试这样的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')
一些注意事项:-
DATE
DTTM_ADM
上使用TO_CHAR
,但这将使Oracle无法使用该列上的索引 我将在您的where子句上使用extract()
。
EXTRACT()
从时间戳类型或DATE中提取并返回年,月,日,时,分,秒或时区。
SELECT *
FROM PATIENT_ADM A, PATIENT_ADM
WHERE EXTRACT(YEAR FROM A.DTTM_ADM) > 2008
AND EXTRACT(YEAR FROM B.DTTM_ADM) < 2010;
首先确定DTTM_ADM是date类型还是varchar2或char这样的字符类型。 它应该是一个日期,但是正如您所说的“在他们的系统中,它就像01-JUL-14”,他们可以将其存储在字符串中。
函数to_char在日期上有效。 to_char(DTTM_ADM,'yyyy')会以字符串形式表示年份(例如'2009')。
如果DTTM_ADM恰好是字符串类型,则to_char没有用。 您将需要字符串函数SUBSTR来获取包含年份的子字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.