2015-11-07 94 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),因此将导致表扫描。它不能使用索引,因为它必须单独转换表的每一行中的字段以评估表达式的左侧。随着桌子大小的增加,表演将受到影响。 –