2016-08-25 16 views
1

如果我做的时间:只选择从日

SELECT PRESERV_STARTED 
FROM HARVESTED_L; 

我会得到这样的价值观:

23-12-1999 00:00:00 
21-03-2000 22:01:37 
... 

等。 (PRESERV_STARTED有型号DATE

我想要的只是选择日期与时间部分,其中时间不是00:00:00,以便我可以省略这些。 有很多关于解决这一信息,说我可以这样做:

select cast(AttDate as time) [time] 
from yourtable 

而对于旧版本的SQL Server:

select convert(char(5), AttDate, 108) [time] 
from yourtable 

然而其他的建议是:

SELECT CONVERT(VARCHAR(8),GETDATE(),108) 

我尝试了所有这些,其他几个,但没有运气。 所以我的问题是,有一个像这样的日期:23-12-1999 00:00:00,我该如何选择时间部分?

什么来最直观的给我(与我认为提案混合)是一样的东西:

SELECT CONVERT(VARCHAR(8), GETDATE(PRESERV_STARTED), 108) AS timePortion 
FROM HARVESTED_L; 

我从该代码得到一个错误,说"Missing expression"。事实上,这是我从大多数我尝试的建议中得到的错误。

我使用的Oracle SQL Developer version 4.1.1.19

+0

您在Oracle上使用SqlServer表达式吗? – vercelli

+0

SELECT TO_CHAR(SYSDATE,'HH24:MI:SS'FROM DUAL,change sysdate to your field and DUAL with your table name。 – BigMike

+0

我不明白你想做什么。你想选择所有的行,但修改列?还是要选择行的子集? – Codo

回答

2

如果我理解正确的话,你要选择仅适用于行日期列的时间部分不是00:00:00。你不必为了做到这一点而花时间参加。您可以使用TRUNC函数(默认情况下)返回日期并截断时间部分。以下是一个示例:

SQL> select * from t; 

     ID D 
---------- ------------------- 
     1 2016-01-01 00:00:00 
     2 2016-01-01 00:01:00 
     3 2016-01-01 00:01:23 

3 rows selected. 

SQL> select * from t where d <> trunc(d); 

     ID D 
---------- ------------------- 
     2 2016-01-01 00:01:00 
     3 2016-01-01 00:01:23 

2 rows selected. 
3

在Oracle中你可以格式化你喜欢的日期(时间):

SELECT TO_CHAR(preserv_started, 'HH24:MI:SS') 
FROM harvested_l