将两个表连接到两列,其中数据类型不匹配

时间:2017-05-05 04:37:18

标签: mysql casting

我正在尝试将MySQL数据库的两个表连接成两列:

SELECT ol.utdate, ol.session, dl.utdate, dl.dsession FROM observation_log ol 
LEFT OUTER JOIN diary_log dl ON (ol.utdate = dl.utdate AND ol.session = dl.dsession);

问题是ol.session是一个CHAR而dl.dsession是一个TINYINT(4)。两者之间的对应关系是字母表中字母的整数:

=======================
ol.session||dl.dsession
=======================
A         ||1
B         ||2
C         ||3
...
=======================

如何将ol.session或dl.dsession转换(映射或强制转换,不确定要使用的正确动词)是字母还是整数?

谢谢, 艾娜。

1 个答案:

答案 0 :(得分:4)

您可以使用MySQL ASCII()函数将ol.session列中的大写字母转换为与dl.session列匹配的数字:

SELECT
    ol.utdate,
    ol.session,
    dl.utdate,
    dl.dsession
FROM observation_log ol 
LEFT OUTER JOIN diary_log dl
    ON ol.utdate = ol.utdate AND
       ASCII(ol.session) - 64 = dl.dsession

请注意,ASCII('A')返回65,ASCII('B')返回66,依此类推。因此,如果我们从64中减去ASCII(ol.session),我们就可以使事情保持一致。