我正在尝试运行一个简单的查询,它根据时间戳获取数据,如下所示:
SELECT *
FROM <table_name>
WHERE id = 1
AND usagetime = timestamp('2012-09-03 08:03:06')
WITH UR;
这似乎没有向我返回记录,而此记录在数据库中存在id = 1。
我在这里做错了什么?
列使用时间的数据类型是正确的,设置为timestamp。
答案 0 :(得分:20)
@bhamby是对的。通过将微秒保留在时间戳值之外,您的查询将仅匹配2012-09-03 08:03:06.000000的使用时间
如果您没有从先前的查询中捕获完整的时间戳值,则可以指定一个范围谓词,该谓词将匹配该时间内的任何微秒值:
...WHERE id = 1 AND usagetime BETWEEN '2012-09-03 08:03:06' AND '2012-09-03 08:03:07'
或
...WHERE id = 1 AND usagetime >= '2012-09-03 08:03:06'
AND usagetime < '2012-09-03 08:03:07'
答案 1 :(得分:0)
与字符串格式进行比较时,您可能希望在列上使用TRUNC函数,因此它只能比较到几秒钟,而不是毫秒。
SELECT * FROM <table_name> WHERE id = 1
AND TRUNC(usagetime, 'SS') = '2012-09-03 08:03:06';
如果您想截断最多几分钟,几小时等,也可以使用适当的符号代替“ SS”:
hour ('HH'), minute('MI'), year('YEAR' or 'YYYY'), month('MONTH' or 'MM'), Day ('DD')