在查询的基础上从oracle数据库中获取记录

时间:2013-10-19 14:04:56

标签: database oracle

我有一个表员工,其中包含以此格式存储日期的提交日期

19.10.13 10:50:56.464

现在有时我需要根据日期值知道的日期从employee表中获取记录,例如我想根据日期获取employee表的所有记录。日期是19.10.13 10:50:56.464,请告知oracle数据库的查询是什么,因为我正在尝试这个但是它给了例外..

select * from employee where date ='19.10.13 10:50:56.464'

在DDL中,日期定义如下所示..

date  TIMESTAMP(6)   NOT NULl

2 个答案:

答案 0 :(得分:4)

timestamp(和date)列以任何特定格式存储值。在检索到值之后,SQL客户端工具会应用您看到的任何格式。

您的比较

where date = '19.10.13 10:50:56.464'

依赖于隐式数据类型转换,只有在您提供的格式与SQL客户端(和数据库)使用的当前NLS格式相同时才会起作用。在比较时间戳(或日期)列时,您应始终指定“真实”时间戳(或日期)文字

指定时间戳文字的最强大(也是最短)是使用ANSI文字格式:

select * 
from employee 
where date = timestamp '2013-10-19 10:50:56.464' 

引入ANSI时间戳文字,其中包含关键字timestamp,后跟一个字符串,其中日期格式为ISO时间戳。使用ANSI文字时,必须以24小时格式提供时间部分。

顺便说一下:date是一个可怕的名字。首先是因为它也是数据类型的名称。其次(也是更重要的):它没有记录列包含的内容。是“雇用日期”,“出生日期”,“休假日期”,“最后休假日期”?你真的应该考虑找一个更好的名字。

答案 1 :(得分:0)

SQL Fiddle Example

select * 
from employee
where date = to_timestamp('13.10.13 10:50:56.464','DD.MM.YY HH24:MI:SS.FF3')

将输入转换为时间戳并进行比较。