2013-02-15 258 views
0

我正在数据仓库中构建报表,它将比较其中一家餐馆的每日支票和付款进行比较。我需要能够过滤的日期字段的数据但是它需要用绳子,看起来像美国日期格式,但绳子,让将日期转换为字符串SQL

Select a.* from 
xx a, xy b 
where 
a.payment_date = b.check_date 

a.payment_date的格式进行比较是DD-MON-YY(日)并且b.check_date的格式是MM/DD/YYYY,但是它是一个字符串。任何指向解决这个问题最有效的方法非常赞赏。

+0

由于你问的是效率问题,与转换运营商做'JOIN'_将会损害性能。 _efficient_方法是添加一个真正的日期列。可悲的是,它很少是现实的。 – 2013-02-15 12:48:23

+0

这个字符串究竟来自哪里? – 2013-02-15 12:51:13

+0

这是旧的遗留系统,吐出字符串而不是日期。 – 2013-02-15 12:53:39

回答

2

转换check_datestringdate使用TO_DATE()

SELECT a.* 
FROM xx a, xy b 
WHERE a.payment_date = TO_DATE(b.check_date, 'mm/dd/yyyy') 

或者你也可以做其他方式,使用TO_CHAR()

+0

Thx,Joao似乎很简单,但却被证明非常有效。 – 2013-02-15 13:45:25

+0

@Lomo_effect - 要比较日期,除非尝试比较日期和时间,否则应始终在日期前应用TRUNC()。 – Art 2013-02-15 13:52:33

0

我认为这可能工作FR你

选择。*从 XX一,XY b 其中 转换(日期时间,a.payment_date)=转换(日期时间,b.check_date)

+0

oracle不使用转换。它使用to_date。 – 2013-02-15 12:50:19