【问题标题】:Convert Char to Int or vice versa将 Char 转换为 Int,反之亦然
【发布时间】:2020-03-01 05:46:44
【问题描述】:

如果不从输出中删除任何值,我无法获得正确的转换。

我想加入两张表,但一张表的主键是char(4),另一张表的主键是INT。

这是我到目前为止所做的:

select A.ID,
B.ID from 
TableA A
 left join tableB B on
 cast(a.ID as varchar(4) = B.ID

我意识到这不会带来单个数字值。

Table A values: 0,1,2,3,41
Table B values: 0,1,2,3,41

我的原始查询的输出只给了我 41,而忘记了其他 4 个值。

我需要能够获得其他 4 个值

关于如何获得我想要的输出的任何想法?

【问题讨论】:

  • 如果您只在varchar 中存储int 值,为什么不修复数据类型并将列更改为int?在int 上执行JOIN -> varchar 会执行缓慢,因为没有索引可以帮助您。

标签: sql sql-server type-conversion


【解决方案1】:

我刚刚使用临时表对此进行了测试,一切正常(我确实添加了一个结束 ))

create table #tableA(id int)
insert #tablea (id) values (0), (1), (2), (3), (41)
create table #tableb(id char(4))
insert #tableb (id) values (0), (1), (2), (3), (41)

select A.ID,
B.ID from 
#TableA A
 left join #tableB B on
 cast(a.ID as varchar(4)) = B.ID

【讨论】:

    【解决方案2】:

    你可以转换成字符串:

    select A.ID, B.ID
    from  TableA A left join
          tableB B
          on cast(a.ID as varchar(4)) = B.ID;
    

    正如我从痛苦的经历中学到的,这不能处理前导零或小数点 0。所以0.00 与000 不一样。但是,这对于单个数字应该没问题,除非有零填充。

    对于数值比较,往另一个方向走

    select A.ID, B.ID
    from  TableA A left join
          tableB B
          on a.ID = try_convert(int, B.ID);
    

    当然,真正的解决方案是修复表,使列具有相同的数据类型。

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      相关资源
      最近更新 更多