2015-11-07 93 views
0

我想在我的GridView中顯示其當前日期的時間戳不超過1年的所有數據。VB.net用於查詢1年前的SQL語句時間戳

我的時間戳的格式像這樣:20110125-071830yyyymmdd-hhmmss

我試圖參考:

Retrieve rows less than a day old

Select * from table_name WHERE DATE(timestampVal) > DATE(NOW() - INTERVAL 1 YEAR); 

,但得到缺少表達標誌

我也嘗試過各種各樣但是,我的timestampVal與它的格式不同。

例如像:https://community.oracle.com/thread/2207956

,在編碼:Select * from table_name WHERE timestampVal < sysdate - interval '1' year ;

,但得到的錯誤:literal does not match format string這意味着SYSDATE無法讀取礦是如何被格式化。

如何查詢我的時間戳以拉出所有一年或更少的年份?

FYI:timestampVal是字符串類型[VARCHAR]

+0

'timestampVal'的數據類型是什麼? –

+0

@BobJarvis varchar我知道需要以某種方式被轉換,我已經嘗試了一些轉換,但它不工作。我會在我的帖子中記下它是一個字符串類型 – narue1992

+0

所有這些字符串的格式是相同還是不同?請提供您問題中的值的示例。謝謝。 –

回答

1

它看起來像下面應該工作:

Select * 
    from table_name 
    WHERE TO_DATE(timestampVal, 'YYYYMMDD-HH24MISS') > sysdate - interval '1' year; 

另外請注意,我顛倒了比較:你曾表示希望行,其中timestampVal不是比1年前 - 所以timestampVal應該比當前時間減去一年更大(更新)。

試試看。

祝你好運。

+0

我從字面上來說只是在玩TO_DATE,但我在「'中的東西不一樣。它看起來正在運行,但運行一段時間後,我得到一個錯誤標誌'ORA-01858:一個非數字字符被發現的地方數字是預期的'所以不知道爲什麼,但我不認爲這是因爲你的碼。如果你不介意我問,讓我說我的一年是特定的[在2013年之前停止]? – narue1992

+0

但是,您給我的答案確實有效。所以,感謝你幫助我 – narue1992

+0

請記住,雖然這樣的方法可能會產生正確的結果,但它是[non-sargable](https://en.wikipedia.org/wiki/Sargable),因此將導致表掃描。它不能使用索引,因爲它必須單獨轉換表的每一行中的字段以評估表達式的左側。隨着桌子大小的增加,表演將受到影響。 –