0

我有一个表员工,其中包含一个归档日期,其中日期以这种格式存储

19.10.13 10:50:56.464

现在有时我需要根据我知道日期值的日期从员工表中获取记录,例如我想根据日期和日期获取员工表的所有记录是 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
4

2 回答 2

4

timestamp(and 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是一个可怕的列名称。首先,因为它也是数据类型的名称。其次(也是更重要的):它没有记录该列包含的内容。是“入职日期”、“出生日期”、“离职日期”、“最后休假日期”吗?你真的应该考虑为它找一个更好的名字。

于 2013-10-19T15:39:57.953 回答
0

SQL 小提琴示例

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

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

于 2013-10-19T17:03:26.053 回答