这可能相当简单,但我不知道如何解决这个问题。
所以这是一个我正在做的简单查询:
perform
现在,如果我执行完全相同的查询删除“AND TIME = '00:00'”,一切正常,但如果我尝试搜索TIME,则会抛出以下错误:
SELECT TO_CHAR(DATE,'DD-MM-YYYY') AS DATE, TO_CHAR(TIME,'HH24:MI') AS TIME,
CODEROOM, GROUP0, GROUP1, GROUP2, GROUP3,
FROM CONCERTS
WHERE DATE = '20-05-16' AND TIME = '00:00' AND CODEROOM = '1'
我知道我可以在同一列时间和日期进行分组,我尝试过,但我也无法修复它。
我真的不知道如何解决这个问题,我知道这可能是因为Oracle中的DATE存储了DATE和TIME,并且尽管时间还不错,它可能会有一个无效的DATE,但如果是这样的话,则会出现错误将在执行查询时抛出,我甚至无法执行它(我还检查了日期是否有效)
有什么方法可以解决这个问题吗?我一直在抬头,似乎无法找到解决方案
提前多多感谢:)
答案 0 :(得分:1)
首先,您可能首先要更改列定义,以便拥有有意义的名称,例如CONCERT_DATE
或CONCERT_TIME
其次,您需要在where子句中应用相同的to_char函数 以及..
SELECT TO_CHAR(DATE,'DD-MM-YYYY') AS CONCERT_DATE, TO_CHAR(TIME,'HH24:MI') AS CONCERT_TIME,
CODEROOM, GROUP0, GROUP1, GROUP2, GROUP3,
FROM CONCERTS
WHERE TO_CHAR(DATE,'DD-MM-YYYY') = '20-05-2016'
AND TO_CHAR(TIME,'HH24:MI') = '00:00'
AND CODEROOM = '1'
答案 1 :(得分:1)
正如我在评论中解释的那样,你不能在where中使用别名。您需要将函数复制为@cableload,或使用子查询
SELECT *
FROM (
SELECT To_char(date, 'DD-MM-YYYY') AS D,
To_char(time, 'HH24:MI') AS T,
coderoom,
group0, group1,
group2, group3,
FROM concerts
WHERE coderoom = '1'
) foo
WHERE foo.D = '20-05-2016' -- here you had YY instead of YYYY
AND foo.T = '00:00'
并且不要使用DATE
或TIME
之类的保留字作为别名/ fieldname
答案 2 :(得分:0)
您的日期文字需要采用ISO-8601格式,即'2016-05-20'
而不是'20-05-16'
。