1

我正在尝试运行此 Oracle 查询...

  SELECT COUNT(*) as total, 
         q1 
    FROM exit_responses 
   WHERE sdate BETWEEN '03-Aug-10 12:00:00 AM' AND '03-Nov-10 12:00:00 AM' 
GROUP BY q1;

...但我不断收到此错误...

Error starting at line 3 in command:
SELECT COUNT(*) as total, q1 FROM exit_responses WHERE sdate BETWEEN '03-Aug-10 12:00:00 AM' AND '03-Nov-10 12:00:00 AM' GROUP BY q1 
Error at Command Line:3 Column:130
Error report:
SQL Error: ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

有人有想法么?说这是一种不一致的数据类型......但我想我不完全理解。

谢谢

顺便说一句,这是我的 exit_responses 表的 DESC:

DESC exit_responses
Name                           Null     Type                                                                                                                                                                                          
------------------------------ -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
SDATE                                   DATE                                                                                                                                                                                          
F_NAME                                  VARCHAR2(255 CHAR)                                                                                                                                                                            
L_NAME                                  VARCHAR2(255 CHAR)                                                                                                                                                                            
TITLE                                   VARCHAR2(255 CHAR)                                                                                                                                                                            
DEPARTMENT                              VARCHAR2(255 CHAR)                                                                                                                                                                            
EMP_TYPE                                VARCHAR2(11 CHAR)                                                                                                                                                                             
LENGTH_OF_SERVICE                       VARCHAR2(255 CHAR)                                                                                                                                                                            
Q1                                      CLOB()                                                                                                                                                                                        
Q2                                      CLOB()                                                                                                                                                                                        
Q2_OTHER                                CLOB()                                                                                                                                                                                        
Q3_PAY                                  NUMBER                                                                                                                                                                                        
Q3_HOLIDAYS                             NUMBER                                                                                                                                                                                        
Q3_VACATION                             NUMBER                                                                                                                                                                                        
Q3_SICK                                 NUMBER                                                                                                                                                                                        
Q3_INSURANCE                            NUMBER                                                                                                                                                                                        
Q3_RETIREMENT                           NUMBER                                                                                                                                                                                        
Q3_FSA                                  NUMBER                                                                                                                                                                                        
Q4_AVAILABILITY                         NUMBER                                                                                                                                                                                        
Q4_QUALITY                              NUMBER                                                                                                                                                                                        
Q4_SATISFACTION                         NUMBER                                                                                                                                                                                        
Q4_COMMENTS                             NUMBER                                                                                                                                                                                        
Q5_ORIENTATION                          NUMBER                                                                                                                                                                                        
Q5_POLICIES                             NUMBER                                                                                                                                                                                        
Q5_PROMOTIONAL                          NUMBER                                                                                                                                                                                        
Q6_JOBDUTIES                            NUMBER                                                                                                                                                                                        
Q6_RELATIONSHIPS                        NUMBER                                                                                                                                                                                        
Q6_COOPERATION                          NUMBER                                                                                                                                                                                        
Q6_EQUIPMENT                            NUMBER                                                                                                                                                                                        
Q6_CONDITIONS                           NUMBER                                                                                                                                                                                        
Q6_SAFETY                               NUMBER                                                                                                                                                                                        
Q7                                      NUMBER                                                                                                                                                                                        
Q8_KNOWLEDGE                            NUMBER                                                                                                                                                                                        
Q8_DELEGATION                           NUMBER                                                                                                                                                                                        
Q8_OBSERVANCE                           NUMBER                                                                                                                                                                                        
Q8_FEEDBACK                             NUMBER                                                                                                                                                                                        
Q8_CONTRIBUTIONS                        NUMBER                                                                                                                                                                                        
Q8_LISTENED                             NUMBER                                                                                                                                                                                        
Q8_COMPLAINTS                           NUMBER                                                                                                                                                                                        
Q9                                      VARCHAR2(3 CHAR)                                                                                                                                                                              
Q9_DESCRIBE                             CLOB()                                                                                                                                                                                        
Q10                                     CLOB()                                                                                                                                                                                        
Q11                                     NUMBER                                                                                                                                                                                        
Q11_COMMENTS                            CLOB()                                                                                                                                                                                        
Q12                                     NUMBER                                                                                                                                                                                        
Q12_DESCRIBE                            CLOB()                                                                                                                                                                                        
ADDITIONAL_COMMENTS                     CLOB() 
4

5 回答 5

3

假设sdate的日期类型是 Oracle DATE,使用TO_DATE 函数将字符串转换为 Oracle 中的 DATE:

  SELECT COUNT(*) as total, 
         q1 
    FROM exit_responses 
   WHERE sdate BETWEEN TO_DATE('03-Aug-10 12:00:00 AM', 'DD-MON-YY HH12:MI:SS AM') 
                   AND TO_DATE('03-Nov-10 12:00:00 AM', 'DD-MON-YY HH12:MI:SS AM') 
GROUP BY q1;
于 2010-11-02T20:07:09.423 回答
2

SDATE 列的数据类型是什么?假设它是一个日期,你几乎肯定想使用明确的 TO_DATE 调用将你的字符串转换为日期,即

WHERE sdate BETWEEN to_date('03-Aug-2010', 'DD-MON-YYYY') 
                AND to_date( '03-Nov-2010', 'DD-MON-YYYY' )

由于午夜是未指定的默认时间,因此您不一定需要 12:00:00 AM 位。如果你想包括那个

WHERE sdate BETWEEN to_date('03-Aug-2010 12:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM') 
                AND to_date( '03-Nov-2010 12:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM' )

如果 SDATE 是 DATE 并且您希望 BETWEEN 采用两个不同的 Unix 纪元(自 1970 年 1 月 1 日以来的毫秒数)而不是字符串,则您需要类似

WHERE sdate BETWEEN date '1970-01-01' + :1/86400000  
                AND date '1970-01-01' + :2/86400000 

其中 :1 和 :2 是两个绑定变量。如果您的纪元是自 1970 年 1 月 1 日以来的秒数

WHERE sdate BETWEEN date '1970-01-01' + :1/86400  
                AND date '1970-01-01' + :2/86400 
于 2010-11-02T20:08:03.197 回答
1

我的猜测是这sdate是一个 DATE 或 DATETIME 列,在这种情况下你需要转换你的日期字符串:

  SELECT COUNT(*) as total,  
         q1  
    FROM exit_responses  
   WHERE sdate BETWEEN to_date('03-Aug-10 12:00:00 AM') AND to_date('03-Nov-10 12:00:00 AM')  
GROUP BY q1; 
于 2010-11-02T20:08:30.103 回答
1

对ORACLE一无所知,我敢打赌你实际上不能GROUP BYCLOB领域。这很有意义...

另外,看看这个。摘抄:

从 Oracle 的角度来看,这很重要,因为您不能在 clob 上进行分组。为了进行分组,您需要能够排序,并且 clob 字段没有自然的排序顺序。解决方法是在 clob 字段上执行 to_char 函数,但您最多可以获得 4000 个字符。对我来说,这符合要求,因为我需要的子字符串是一个小字符串。但问题是我需要在 clob 字段中对 XML 标记的一部分进行排序,并根据它对它们进行分组。不仅如此,我还需要在 XML 消息中找到特定类型的错误并对其进行计数。

于 2010-11-02T20:59:00.550 回答
0

我认为,最好使用 to_date 函数。

where sdate between
  TO_DATE('03.08.2010:00:00:0','DD.MM.YYYY:HH24:MI:SS') and TO_DATE('03.10.2010:00:00:0','DD.MM.YYYY:HH24:MI:SS') 
于 2010-11-02T20:09:22.807 回答