sql - 将 Char 转换为 Int,反之亦然
问题描述
如果不从输出中删除任何值,我无法获得正确的转换。
我想加入两张表,但一张表的主键是 a 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 个值
关于如何获得我想要的输出的任何想法?
解决方案
您可以转换为字符串:
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);
当然,真正的解决方案是修复表,使列具有相同的数据类型。
推荐阅读
- php - REGEX - 如何在 preg_match 中做变音符号不敏感?
- node.js - 使用服务帐户密钥访问 Google 数据存储区
- javascript - VueJS Router-link 未链接到视图
- rust - Is there a way to allocate directly to the heap without using the unstable box syntax?
- google-sheets - 始终向上舍入小数
- google-sheets - 在 Google 表格的同一行中重复函数 x 次
- asp.net-core - 有没有办法在 asp.net core 中以全局方式添加 ApiControllerAttribute?
- error-handling - 如何找出 tcl 命令会产生哪些错误?
- ruby-on-rails - FinePrint::SignaturesController 401 with new Devise account
- node.js - 在 axios 和 Vue 中使用 cookie