mysql - 通过数据类型不匹配的两列连接两个表

标签 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 转换(映射或转换,不确定此处使用的正确动词)为字母或整数?

谢谢, 艾娜。

最佳答案

您可以使用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,依此类推。因此,如果我们从 ASCII(ol.session) 中减去 64,我们就可以使事物对齐。

关于mysql - 通过数据类型不匹配的两列连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796616/

相关文章:

如果列值 != 指定值,MySQL 返回 true/false

MySQL 查询 40,000 行 v/s 一次加载和 for 循环

php - mysql 通过描述查找,其中描述等于 id 号,而不使用 id 列

mysql - 如何优化此查询?

java - 类型转换 ((char) a) 其中 a 是 int 范围之间的任何数字

python - 设置Python文件中值的允许数据类型/类型转换的范围

mysql - vb net 使用变量执行类似查询

c# - 为什么这个 Actor 是多余的?

PHP 自定义对象转换

c - 初始化使指针无需强制转换