我正在尝试运行此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;...but我一直收到这个错误...
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 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() 发布于 2010-11-03 04:08:03
SDATE列的数据类型是什么?假设它是一个日期,您几乎肯定希望使用显式的TO_DATE调用将字符串转换为日期。
WHERE sdate BETWEEN to_date('03-Aug-2010', 'DD-MON-YYYY')
AND to_date( '03-Nov-2010', 'DD-MON-YYYY' )由于午夜是指定none时的默认时间,因此不一定需要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是一个日期,并且您希望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-03 04:07:09
假设sdate的date类型是Oracle DATE,在Oracle中使用TO_DATE function将字符串转换为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-03 04:08:30
我猜测sdate是一个日期或日期时间列,在这种情况下,您需要转换日期字符串:
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; https://stackoverflow.com/questions/4081641
复制相似问题