所以我正在为自己做一些练习,并且我已经按照这个指示给自己:(我在医院里使用他们的测试数据库) 显示器:
Lname, Fname, Mname, Birth_date, Chief_Complaint, DTTM_ADM
(日期/时间入场)DTTM_ADM
2008
和2010
我知道如何显示我给自己的第一条和第二条指令,但我很难做第二条指令。我不太了解SQL及其他功能(这就是为什么我这样做,要学习)。
我的导师告诉我执行函数to_char
来解决我的#2指令。因为我只是在几年之间限制我的搜索(在他们的系统中它就像01-JUL-14
)。
所以我的问题是,如何以一种方式执行to_char或to_date我只需要指示我的搜索只会在几年内没有一天和一个月的限制(而不是说sql {{ 1}},它只是01-JUL-14
?
2014)
我该如何正确地做到这一点? (当你对某个网站的访问权限有限且网络速度非常慢时,OJT很难做到)
答案 0 :(得分:1)
您可以通过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的操作成本稍高。请参阅随附的源文件。
答案 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')
一些注意事项: -
DATE
TO_CHAR
上使用DTTM_ADM
,但这会使该列上的索引无法被Oracle使用答案 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来获取保存年份的子字符串。