【发布时间】:2021-03-09 16:58:39
【问题描述】:
我有一个带有字母数字代码(varchar 列)的表 T1,其中前三个数字总是像这样的数字:
001ABCD
100EFGH
541XYZZ
OTHER
注意:请注意,我有一个异常记录,全是 alpha (OTHER)。
我还有一个带有 3 位数字(int 列)的表 T2,如下所示:
001
200
300
所以当我运行以下查询时:
SELECT * from T1
LEFT JOIN T2
ON SUBSTRING(T1.code1,1,3) = T2.code2
WHERE T1.code1 <> 'OTHER'
这导致了我的错误:
将 varchar 值“OTH”转换为数据类型 int 时转换失败。
我知道问题,但不知道如何解决(它试图将“OTH”与 T2.code2 INT 列进行比较)。 我尝试使用 WHERE,但它根本不起作用。
我无法摆脱“其他”记录并将 T2.code2 列从 int 转换为 varchar 不是一种选择。有什么想法吗?
【问题讨论】:
-
您可以使用 try_convert 将子字符串包装在 where 子句中。所以它会像
TRY_CONVERT(INT, SUBSTRING(T1.code1,1,3)) = T2.code2 -
或者,您可以将 T2.code2 转换为 CHAR(3)。无论哪种方式都应该有效。
-
另外,它不能是 3 位数字并且是 int 列。 001 不是整数。
标签: tsql join type-conversion