簡體   English   中英

將帶有月份的 varchar 轉換為日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM