微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将带有月份的varchar转换为日期

如何解决将带有月份的varchar转换为日期

| MysqL>从tr选择*; + ------ + | mnt | + ------ + | jun | | mar | | jan | |八月| + ------ + 设置4行(0.00秒) MysqL>从tr1选择*; + ------ + ------ + | mnt | id | + ------ + ------ + |八月| 11 | | jan | 12 | | mar | 15 | |四月| 16 | + ------ + ------ + 设置4行(0.00秒) 它适用于此查询MysqL>在tr.mnt = tr1.mnt上的tr join tr1中选择*; + ------ + ------ + ------ + | mnt | mnt | id | + ------ + ------ + ------ + |八月|八月| 11 | | jan | jan | 12 | | mar | mar | 15 | + ------ + ------ + ------ + 设置3行(0.00秒) MysqL>从tr2选择*; + ------------ + ------ + | mn | id | + ------------ + ------ + | 2009-02-14 | 11 | | 2009-03-03 | 12 | | 2009-08-08 | 12 | + ------------ + ------ + 设置3行(0.00秒) MysqL>插入tr2值(\'2009-01-01 \',14); 查询正常,1行受影响(0.06秒) 但它对此不起作用。 MysqL>在tr.mnt = MONTHNAME(tr2.mn)上的tr join tr2中选择* 空置(0.00秒) 请给出确切的查询。     

解决方法

        
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月的结果并没有真正的可比性,因此您确实需要弄清楚年份信息的来源,并确保不要混淆两者之间的匹配。年份。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。