【问题标题】:Oracle to SQL Server Date Conversion: Error invalid relational operatorOracle 到 SQL Server 日期转换:错误无效的关系运算符
【发布时间】:2014-08-08 03:32:24
【问题描述】:

需要将日期格式从(源 oracle)yyyy/mm/dd 转换为(目标 - SQL Server)mm/dd/yyyy。

当前查询:

SELECT* FROM WVT.WVCAS 
WHERE to_date(dttmcutpull, 'yyyy/mm/dd hh24:mi:ss', 'mm/dd/yyyy hh24:mi:ss')

得到错误:

ORA-00920: invalid relational operator

请帮忙。

【问题讨论】:

  • 如果它已经是一个日期字段,您不必使用 to_date,您只需使用 to_char(dttmcutpull,'mm/dd/yyyy')。此外,您必须将其设置为等于某个值,否则您将始终收到该错误。如果这是 WVT.WVCAS 表中的日期,而您只想查看格式更改,则需要在选择之后进行。

标签: sql oracle date


【解决方案1】:

“无效的关系运算符”通常意味着您有一个没有比较的where 子句。在您的情况下,where 子句具有转换 to_date(),但没有比较。也许你的意思是:

SELECT *
FROM WVT.WVCAS 
WHERE dttmcutpull > sysdate - 1;

换句话说,仅仅转换数据是不够的,你必须将它与某些东西进行比较。

如果您只想进行转换,请将其放入select

SELECT w.*,
       to_char(dttmcutpull, 'mm/dd/yyyy hh24:mi:ss') as NewDate
FROM WVT.WVCAS w;

编辑:

您必须独立转换每一列,而不是一次全部转换。 to_char() 接受两个参数,一个日期和一个格式:

SELECT w.*,
       to_char(dttmcutpull, 'mm/dd/yyyy hh24:mi:ss') as date1,
       to_char(DTTMPULLll, 'mm/dd/yyyy hh24:mi:ss') as date2,
       to_char(DTTMRUNll, 'mm/dd/yyyy hh24:mi:ss') as date3,
       to_char(SYSLOCKDATEll, 'mm/dd/yyyy hh24:mi:ss') as date4,
       to_char(SYSMODATEll, 'mm/dd/yyyy hh24:mi:ss') as date5,
       to_char(SYSCREATEDATE 'mm/dd/yyyy hh24:mi:ss') as NewDate
FROM WVT.WVCAS w;

【讨论】:

  • 接收错误 ORA-00933: SQL 命令在我运行时未正确结束:SELECT w.*, to_date(dttmcutpull, 'yyyy/mm/dd hh24:mi:ss', 'mm/dd/ yyyy hh24:mi:ss') as NewDate FROM WVT.WVCAS w;
  • @user3750517 - 如果用于显示,那么您应该使用 to_char(),正如 Bob 所说的那样;并且您不应该为任何一个函数使用两个格式掩码。
  • @Gordon Linoff 现在我得到一个缺少右括号的错误。
  • 我使用了这个查询:SELECT w.*, to_char(dttmcutpull, DTTMPULL, DTTMRUN, SYSLOCKDATE, SYSMODATE, SYSCREATEDATE 'mm/dd/yyyy hh24:mi:ss') as NewDate FROM WVT.WVCAS w;
【解决方案2】:
SELECT w.*,
       TO_CHAR(to_date(dttmcutpull, 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NewDate
FROM WVT.WVCAS w;

我正在做的是,

  • dttmcutpull 是一个字符串 (VARCHAR),格式为 yyyy/mm/dd hh24:mi:ss
  • 最初使用 TO_DATE 将字符串转换为 DATE
  • 使用 TO_CHAR 函数将 DATE 重新转换为 mm/dd/yyyy hh24:mi:ss 字符串

使用的语法类似于

SELECT
TO_CHAR 
( 
    TO_DATE (STRING_FIELD_VALUE, EXISTING_FORMAT_OF_STRING_FIELD_VALUE),
    EXPECTED_FORMAT_OF_NEW_VALUE
) AS NEW_STRING_FIELD_VALUE;

编辑:您的查询应该是:

  1. 如果 dttmcutpull、DTTMPULL、DTTMRUNll 等是 DATE 数据类型,则

    SELECT w.*, to_char(dttmcutpull, 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE1, to_char(DTTMPULLll, 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE2, to_char(DTTMRUNll, 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE3, to_char(SYSLOCKDATEll, 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE4, to_char(SYSMODATEll, 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE5, to_char(SYSCREATEDATE 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE6 FROM WVT.WVCAS w;

  2. 如果 dttmcutpull、DTTMPULL、DTTMRUNll 等是 VARCHAR(STRING/CHARACTER) 数据类型,则

    SELECT w.*, TO_CHAR(to_date(dttmcutpull, 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE1, TO_CHAR(to_date(DTTMPULLll, 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE2, TO_CHAR(to_date(DTTMRUNll, 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE3, TO_CHAR(to_date(SYSLOCKDATEll, 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE4, TO_CHAR(to_date(SYSMODATEll, 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE5, TO_CHAR(to_date(SYSCREATEDATE , 'yyyy/mm/dd hh24:mi:ss'), 'mm/dd/yyyy hh24:mi:ss') as NEW_DATE6 FROM WVT.WVCAS w;

【讨论】:

  • 嗨 Nishanthi....我收到了这个错误。消息代码:RR_4035 消息:SQL 错误 [ ORA-00907: 缺少右括号
猜你喜欢
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多