Oracle不接受2000年之前的日期

use*_*670 2 .net sql oracle oledb ora-01858

我正在从C#.NET应用程序插入Oracle数据库.失败的查询看起来像:

INSERT INTO staging (create_date) VALUES ('16-Nov-1999')
Run Code Online (Sandbox Code Playgroud)

当我从SQL Navigator运行它时,运行正常.通过.NET,数据库抛出:

ORA-01858: a non-numeric character was found where a numeric was expected
Run Code Online (Sandbox Code Playgroud)

我运行了一些测试用例并确认是导致异常的一年.'31 -Dec-1999'之后的任何事情都运行良好.

OMG*_*ies 7

在提交要存储为DATE的值时,最好使用TO_DATE函数:

INSERT INTO staging 
   (create_date) 
VALUES 
   (TO_DATE('16-Nov-1999', 'DD-MON-YYYY'))
Run Code Online (Sandbox Code Playgroud)

  • @ user480670:如果您要预先格式化字符串,那么您将采用日期格式.问题是客户端日期格式(`NLS_DATE_FORMAT`)与您假设的不同,您可能无法在野外控制它.不假设是更安全的.您可以通过查询`NLS_SESSION_PARAMETERS`表来检查每个客户端应用的格式. (2认同)