2011-06-10 42 views
0
mysql> select * from tr; 
+------+ 
| mnt | 
+------+ 
| jun | 
| mar | 
| jan | 
| aug | 
+------+ 
4 rows in set (0.00 sec) 

mysql> select * from tr1; 
+------+------+ 
| mnt | id | 
+------+------+ 
| aug | 11 | 
| jan | 12 | 
| mar | 15 | 
| apr | 16 | 
+------+------+ 
4 rows in set (0.00 sec) 

it worked for this query.. 

mysql> select * from tr join tr1 on tr.mnt=tr1.mnt; 
+------+------+------+ 
| mnt | mnt | id | 
+------+------+------+ 
| aug | aug | 11 | 
| jan | jan | 12 | 
| mar | mar | 15 | 
+------+------+------+ 
3 rows in set (0.00 sec) 

mysql> select * from tr2; 
+------------+------+ 
| mn   | id | 
+------------+------+ 
| 2009-02-14 | 11 | 
| 2009-03-03 | 12 | 
| 2009-08-08 | 12 | 
+------------+------+ 
3 rows in set (0.00 sec) 

mysql> insert into tr2 values('2009-01-01',14); 
Query OK, 1 row affected (0.06 sec) 

,但它不是在爲這個..將varchar轉換與一個月爲日期

 
mysql> select * from tr join tr2 on tr.mnt=MONTHNAME(tr2.mn); 
Empty set (0.00 sec) 

請給出確切的查詢..

+2

這個週末,你應該讓你的小雞們用他們的Shift鍵,我的朋友花費一些高質量的時間。 – 2011-06-10 04:26:50

回答

1

MONTHNAME(date)返回一個VARCHAR,因此 「是」 - 你可以比較它們。

考慮這個語法:

select * 
from A 
join B on B.InvoiceMonth = MONTHNAME(A.Mnth); 
0

由於MONTHNAME()返回一個字符串,InvoiceMonth是一個字符串,可以三立對它們進行比較。因此,在廣泛的範圍內,您的查詢是可以的。您應該使用現代JOIN符號,雖然:

SELECT * 
    FROM A 
    JOIN B ON B.InvoiceMonth = MONTHNAME(A.Mnth) 
    JOIN C ON B.InvoiceMonth = MONTHNAME(C.Monthx) 

你並不需要使用所有這三個條件:如果X = Y和Y = Z,則X = Z.

當然,因爲2011年1月的結果與2010年1月的結果並無真正的可比性,因此您確實需要計算年度信息的來源,並確保您不會混淆年份之間的匹配。

相關問題