我有一个表员工,其中包含以此格式存储日期的提交日期
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
答案 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)
select *
from employee
where date = to_timestamp('13.10.13 10:50:56.464','DD.MM.YY HH24:MI:SS.FF3')
将输入转换为时间戳并进行比较。