2013-03-17 25 views
0

我想匹配不同表中的列,使用SYSDATE将它们匹配到今天的日期。输出实际上是在所有行上用当天日期填充日期列,而不是实际上具有今天日期的一行。Oracle Sql匹配日期列到sysdate错误

SELECT building.building_code, 
    building.building_name, 
    room_booking.booking_date 
FROM building, 
    room_booking, 
    dual 
WHERE to_date(booking_date) = trunc(sysdate) 

输出为:

BUILDING_CODE BUILDING_NAME BOOKING_DATE 
------------- --------------- ------------ 
A    ARCADIA   <17-mar-13> 
B    BELIZE   <17-mar-13> 
C    CAMDEN   <17-mar-13> 
D    DENVER   <17-mar-13> 
E    EXETER   <17-mar-13> 
F    FORT PORTAL  <17-mar-13> 
G    GRAMPIAN  <17-mar-13> 
H    HELVITICA  <17-mar-13> 
I    INVICTA   <17-mar-13> 
J    JULIET   <17-mar-13> 

10 rows selected 

应该有只有一个结果行,因为只有1与今天的变化更新了一行。我哪里错了?

+2

您需要两个表上的连接条件(并且不需要'dual')。 – Mat 2013-03-17 14:24:27

+0

感谢垫 - 双现在删除 – 2013-03-17 15:07:29

+1

为什么你有'TO_DATE'在'booking_date'附近?它是一个字符串吗? – 2013-03-18 06:20:47

回答

1

这是因为你没有加入表room_bookingbuilding,生产笛卡尔产品。

SELECT 
    b.building_code, 
    b.building_name, 
    r.booking_date 
FROM building b 
     JOIN room_booking r /* missing join condition here: ON r.building_code = b.building_code */ 
WHERE 
    TO_DATE(r.booking_date) = TRUNC(SYSDATE) 
+0

感谢Sebas,这个工作完美 - :) – 2013-03-17 15:08:03

+2

注意隐含的日期格式转换错误。如果会话执行'alter session set nls_date_format ='YYYY-MM-DD HH24:MI:SS';',此代码将不起作用。您可能希望使用'TRUNC(r.booking_date)'而不是'TO_DATE(r.booking_date)''。 – 2013-03-18 00:28:46