如何在DATE GROUP
使用相同的日期但不同的时间?
我使用此代码但收到错误:
SELECT TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') DAY, DE_NO
FROM (
SELECT TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') DAY, DE_NO
FROM PACKINGAPPS_FQA
WHERE (TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') BETWEEN '$start_date' AND '$end_date')
)
GROUP BY DAY, DE_NO
错误是:
Warning: oci_execute() [function.oci-execute]: ORA-00904: "FQA_START_DATE": invalid identifier in...
请帮助建议。感谢
答案 0 :(得分:1)
尝试使用
GROUP BY CAST(datefield AS DATE)
答案 1 :(得分:1)
您的内部查询在字段列表中没有FQA_START_DATE
,因此您的第一个SELECT不正确。
试试这个
SELECT DAY, DE_NO
FROM (
SELECT TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD')
DAY,
DE_NO
FROM PACKINGAPPS_FQA
WHERE (TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD')
BETWEEN '$start_date' AND '$end_date')
)
GROUP BY DAY, DE_NO
答案 2 :(得分:0)
SELECT * FROM TABLE_NAME
WHERE DATE(coloumn_name)='SPECIFY DATE'
GROUP BY coloumn_name
答案 3 :(得分:0)
你可以使用
SELECT field_name(s) FROM table_name GROUP BY DATE(date_field);
此处Date()函数将为date datetime to date。
答案 4 :(得分:0)
您可以使用TRUNC
功能获取日期的一部分(没有时间)。 TRUNC
将删除时间部分。
结果值仍然是一个日期,您可以使用它进行分组并按原样格式化。
我必须承认,我不清楚FQA_START_DATE字段的值是什么类型以及输入变量是什么类型。看起来它们都是字符串,但我建议您将日期存储为日期,并尽可能使用日期输入参数。
理想情况下,您的查询将如下所示:
SELECT
FQA_START_DATE_WITHOUT_TIME,
DE_NO
FROM (
SELECT
trunc(FQA_START_DATE) as FQA_START_DATE_WITHOUT_TIME,
DE_NO
FROM P
ACKINGAPPS_FQA
WHERE
trunc(FQA_START_DATE) BETWEEN $start_date AND $end_date
)
GROUP BY
FQA_START_DATE_WITHOUT_TIME,
DE_NO
如果您不需要任何其他字段,额外的连接或聚合,您可以将其简化为:
SELECT DISTINCT /* Distinct will remove duplicate rows */
trunc(FQA_START_DATE) as FQA_START_DATE_WITHOUT_TIME,
DE_NO
FROM P
ACKINGAPPS_FQA
WHERE
trunc(FQA_START_DATE) BETWEEN $start_date AND $end_date
请注意,这假定FQA_START_DATE
为日期/日期时间字段,假设start_date
和end_date
为日期/日期时间,并返回字段FQA_START_DATE_WITHOUT_TIME
,这是也是一个日期字段。
答案 5 :(得分:0)
首先,您的内联视图中没有任何带有别名FQA_START_DATE
的列(SELECT
子句中的FROM
语句)。您可能在基表中有一个具有该名称的列,但这不在此处,因为您从内联视图SELECT
而不是基表。
其次,内联视图中的WHERE
条件已经完全狂暴,并且当您将字符值与两个字符值进行比较时,它会返回所有错误的结果。
我建议您使用以下查询:
SELECT TRUNC(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS')) AS dt, de_no
FROM packingapps_fqa
WHERE TRUNC(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'))
BETWEEN TRUNC (TO_DATE('$start_date')) AND TRUNC(TO_DATE('$end_date'))
GROUP BY TRUNC(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS')), de_no;