[英]convert varchar with month into date
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)
但它不適合這個..
mysql> select * from tr join tr2 on tr.mnt=MONTHNAME(tr2.mn); Empty set (0.00 sec)
請給出確切的查詢..
MONTHNAME(date)
返回一個 varchar,所以“是” - 你可以比較它們。
考慮以下語法:
select *
from A
join B on B.InvoiceMonth = MONTHNAME(A.Mnth);
由於 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 月的結果並不能真正具有可比性,因此您確實需要計算出年份信息的來源,並確保您不會在年份之間混搭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.