【问题标题】:Missing expression in convert function转换函数中缺少表达式
【发布时间】:2018-01-07 22:43:52
【问题描述】:

我正在尝试使用转换函数将日期字段转换为 varchar,但它不断给出缺少表达式的错误。

我的查询:

select INVENTORY_ITEM_ID, 
       convert(varchar(20), IMPLEMENTATION_DATE,110) 
from apps.mtl_item_revisions  
where INVENTORY_ITEM_ID=21928;

给出错误:

ORA-00936:缺少表达式
00936. 00000 - “缺少表达式”
*原因:
*操作:行错误:97 列:35

【问题讨论】:

  • 使用TO_CHARCONVERT 用于更改字符串的字符集。
  • 在所有情况下 - 每当您在插入中使用此日期 (IMPLEMENTATION_DATE) 时,例如插入 VARCHAR2 列,Oracle 都会将其隐式转换为_char。
  • 转义序列中不支持 TO_CHAR。我想在 Notes SQL 中使用 this(CONVERT),它是一个 ODBC 驱动程序。
  • “转义序列中不支持 TO_CHAR”。不明白你的意思。您希望使用该转换的方式在 Sql Server 中有效,而不是在 Oracle 中。如果要将日期更改为 char,请使用 to_char 函数。
  • NotesSQL 驱动程序中是否有一个设置使它相信它指向 SQLServer DB 而不是 Oracle DB?从根本上说,您不能使用所示的 CONVERT 函数将日期存储为 Oracle 中的字符数据类型。请改用 TO_CHAR 函数。

标签: oracle


【解决方案1】:

以下行是 Microsoft SQL Server 语法,而不是 Oracle 语法:

convert(varchar(20), IMPLEMENTATION_DATE,110) 

您使用什么样的数据库驱动程序或谁编写了它并不重要。查询正在使用 SQLServer 语法发送到 Oracle,而 Oracle 给出了错误。 (此外,虽然查询工具中可能需要它,但请注意使用分号终止 oracle SQL 语句;在某些语言(例如 C#,或 PL/SQL 中的动态 SQL)中,您可能会遇到意外的字符错误。)

将您的 SQL 更改为:

select INVENTORY_ITEM_ID, 
   to_char(IMPLEMENTATION_DATE, 'mm-dd-yyyy') as IMPLEMENTATION_DATE
from apps.mtl_item_revisions  
where INVENTORY_ITEM_ID=21928

这是 SQLServer 110 日期格式的 ORacle 等效项

【讨论】:

  • Do not terminate oracle SQLs with semicolon, in client apps; you may get an unexpected character error -- 取决于客户端应用程序,我猜。我曾经使用过的所有 GUI 都可以正常工作(不,甚至期望)一个分号来区分不同的查询!
  • 是的,但这是客户端应用程序(golden、toad 等)拆分和剥离的功能。如果将其放入代码中,驱动程序更有可能按原样通过它,而 oracle 会拒绝它。我提高了答案的清晰度,感谢您的反馈!
  • “如果它被放入代码中”......呃,PL/SQL 需要一个分号,所以,你知道,#NotAllCode ?
  • @Boneist 阅读此内容:stackoverflow.com/questions/12262145/… 然后告诉我您希望我如何更新我的建议以适应您正在绕过但不直接说的任何内容。实际上;更好的是 - 只需对我的帖子进行编辑,而不是浪费每个人的时间来分裂头发
  • 哇,这么敏感?!我的最后一条评论只是开玩笑地提到您似乎主要考虑数据库外部的代码这一事实,而如果 OP 在 PL/SQL 中编码静态查询,那么您的建议实际上是不合适的,因为它会导致编译错误。您对 *some* 将 sql 语句传递到数据库的方法提出了一个有效的观点,但不是全部,我们试图帮助 OP,而不是混淆他们。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
相关资源
最近更新 更多