2013-02-15 252 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