首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文字不匹配格式字符串-版本11。

文字不匹配格式字符串-版本11。
EN

Stack Overflow用户
提问于 2019-08-02 05:59:17
回答 2查看 336关注 0票数 0

在我的SQL查询中,

代码语言:javascript
复制
TO_DATE('2019-07-22' , 'YYYY-MM-DD')

我想传递sysdate-1,而不是硬编码日期值。

我试过这个,

代码语言:javascript
复制
select TO_CHAR(to_date(
sysdate-1,'DD-Mon-YY'),'YYYY-MM-DD')dates from dual

并在SQL查询中替换了相同的内容,但正在获取以下错误,

ORA- 01861 :文字不匹配格式字符串01861。00000 -“文字不匹配格式字符串”*原因:输入中的文字必须与格式字符串中的文字长度相同(除前导空格外)。如果"FX“修饰符已经打开,则文字必须完全匹配,没有额外的空格。*操作:更正格式字符串以匹配文字。

EN

回答 2

Stack Overflow用户

发布于 2019-08-02 06:10:25

Sysdate是一个返回DATE数据类型的函数;您不TO_DATE它。因此:

代码语言:javascript
复制
SQL> select to_char(sysdate - 1, 'yyyy-mm-dd') result from dual;

RESULT
----------
2019-08-01

SQL>

如果您打算使用日期数据类型,那么--如注释所示--不需要任何TO_something函数:

代码语言:javascript
复制
SQL> select sysdate as today,
  2         sysdate - 1 as yesterday
  3  from dual;

TODAY    YESTERDA
-------- --------
02.08.19 01.08.19

SQL>

这种减法的结果是date数据类型。它呈现给您的方式取决于NLS设置;在我的数据库中,它被设置为dd.mm.yy。为了以不同的方式呈现它,您要么修改设置,要么使用适当的格式掩码应用to_char

代码语言:javascript
复制
SQL> alter session set nls_date_format = 'yyyy-mm-dd';

Session altered.

SQL> select sysdate as today,
  2         sysdate - 1 as yesterday
  3  from dual;

TODAY      YESTERDAY
---------- ----------
2019-08-02 2019-08-01

SQL>
票数 0
EN

Stack Overflow用户

发布于 2019-08-02 11:30:34

虽然sysdatedate数据类型,但Oracle仍然存储时间组件。

您的代码(尝试)删除时间组件。为此,请使用trunc()

代码语言:javascript
复制
select trunc(sydate - 1)

代码语言:javascript
复制
select trunc(sysdate - interval '1' day)

请注意,当您选择数据并查看它时,时间组件通常会显示出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57320708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档