【问题标题】:Converting int to varchar data type in MySQL在 MySQL 中将 int 转换为 varchar 数据类型
【发布时间】:2016-09-14 08:24:04
【问题描述】:

我有两张桌子。我需要比较两个值,但它们在两个表中的数据类型不同。在一个表中,它是 int,而在另一个表中,它是 varchar。我尝试将 varchar 与 cast() 一起使用,但 cast() 不适用于 varchar。

我的查询如下:

select user.username, user_follow.object_id from user,user_follow
left join user_follow
ON cast(user_follow.object_id as varchar(25))= user.username
WHERE user.username= cast(user_follow.object_id as varchar(25));

请帮忙。 谢谢。

【问题讨论】:

    标签: mysql casting int varchar


    【解决方案1】:

    您应该将cast 作为CHAR 数据类型,没有可以将数据转换为的varchar 数据类型,无论如何请尝试:)
    不确定您要使用什么,left joinjoin

    select u.username, uf.object_id from user u
    left join user_follow uf
    ON cast(uf.object_id as char(25))= cast(u.username as char(25))
    -- WHERE cast(u.username as char(25)) = cast(uf.object_id as char(25));
    

    或者

    select u.username, uf.object_id from user u, user_follow uf
    -- left join user_follow uf
    -- ON cast(uf.object_id as char(25))= cast(u.username as char(25))
    WHERE cast(u.username as char(25)) = cast(uf.object_id as char(25));
    

    看看function_cast

    【讨论】:

    • 感谢您的回答。
    • 我已经尝试使用上述查询,但它给了我一个错误。错误代码:1066。不是唯一的表/别名:'user_follow'
    • 已更新,请再次查看。
    • 如果我使用别名,我仍然会出错。错误 1054:“on 子句”中的未知列“u.username”。我的查询是- select u.username, uf.object_id FROM user AS u,user_follow AS uf LEFT JOIN user_follow ON cast(uf.object_id as char(25))= cast(u.username as char(25)) WHERE cast( u.username as char(25)) = cast(uf.object_id as char(25));
    • @JyotKhanguraChahal 请再检查一次我的答案。你应该使用LEFT JOINWHERE之一,看看9.2.1.9 LEFT JOIN and RIGHT JOIN Optimization
    【解决方案2】:

    ":不起作用:" 是对观察到的行为的不精确描述。

    我们期望 MySQL 按照规范“工作”,我们期望的行为是让 MySQL 返回特定的错误消息,例如 1064。

    Error Code: 1064
    You have an error in your SQL syntax; check the manual that corresponds
    to your MySQL server version for the right syntax to use near VARCHAR 
    

    我们预计该错误消息,因为根据 MySQL 参考手册,VARCHAR 不是 CAST 的有效类型,但 CHAR 是。 p>

    参考:

    http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert


    注意:

    这不是查询的唯一问题。

    似乎有两个对user_follow 表的引用;并且至少其中一个引用需要分配一个表别名。

    查询也使用老式逗号语法进行连接操作,而另一个连接操作使用较新的 JOIN 关键字。

    如果没有指定要返回的结果集,我们只是 “猜测”您实际要运行的查询。我猜……

      SELECT u.username
           , f.object_id
        FROM user u
        LEFT
        JOIN user_follow f 
          ON CONVERT(CHAR(25),f.object_id) = u.username
    

    【讨论】:

      【解决方案3】:

      您可以使用 CONCAT(user_follow.object_id)

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 1970-01-01
        • 2011-12-01
        • 2012-04-10
        • 1970-01-01
        相关资源
        最近更新 更多