2015-10-20 69 views
0

所以我必須在日期格式爲這樣一個表:15-JAN-13搜索兩個日期之間具有特定格式

這顯然是1月15日,2013年

的問題是,當我嘗試搜索01/01/2014和SYSDATE之間的日期範圍時,它出錯。

有沒有人知道我將格式化的基於我的日期如何存儲的正確方法?

FYI我的原始數據被存儲爲:15-JAN-13 02.23.27.000000000 PM -05:00

我將其轉換爲 TRUNC(變量名)

+0

您是否可以不將日期存儲爲實際的'DATE'數據類型? – Siyual

+2

您正在使用哪些DBMS? Postgres的?甲骨文?更重要的是:做***不會將日期存儲爲'varchar'。 –

+0

@Siyual FYI我的原始數據被存儲爲:15-JAN-13 02.23.27.000000000 PM -05:00 我將其轉換爲 TRUNC(變量名) – wizkids121

回答

0

既然你是問有關「sysdate」,那麼我會假設你正在使用Oracle。在日期格式中,似乎具有日期的列也不是實際的。最好的選擇是將列更改爲日期類型。如果由於某種原因,是不是一種選擇,接下來要做的最好的事情是文本的日期轉換作爲查詢的一部分:

select * 
    from foo 
where to_date(your_column, 'dd-Mon-yy') between to_date('01/01/2014', 'mm/dd/yyyy') 
              and sysdate 

注意TO_DATE期待它的第二個參數相匹配的結構指定日期'01/01/2014'的日期格式將與日期格式'mm/dd/yyyy'匹配,而your_column(值:'15 -Jan-13')將與不同格式'dd-Mon-yy'匹配。一旦將所有內容翻譯成日期,Oracle就可以執行適當的日期比較。免責聲明:使用to_date將your_column轉換爲日期意味着如果在your_column上定義了索引,它將不會被使用。如果這是一張大桌子,您可能會得到次優的表現。將列數據類型更改爲日期的另一個原因。

+0

等待,所以我進入: WHERE TO_DATE ('01/01/2014','mm/dd/yyyy') 和sysdate 之間的差異(cp.FIRST_PUBLISH_TIME,'dd-Mon-yy')但仍然是錯誤的。我究竟做錯了什麼? – wizkids121

+0

你有什麼錯誤?您在上面提到的評論中提到FIRST_PUBLISH_TIME可能包含超過'15 -Jan-13'的時間戳?格式參數(dd-Mon-yy)必須表示文本('15-Jan-13')_exactly_。請參閱http://www.techonthenet.com/oracle/functions/to_date.php以獲取可用於匹配FIRST_PUBLISH_TIME格式的潛在格式字母的完整列表。包含時間戳的快速示例包括to_date('15 -Jan-13 13:10:11','dd-Mon-yy hh:mi:ss')。 – danjuggler

相關問題