如果这个问题看起来很简单,我很抱歉。我在SQL方面的能力有限,还在学习中,但我喜欢学习新事物!
我有一个派生的varchar列,当从中选择时它看起来像这样:
|Ref1 |
|0145972358-0001|
|5823647892-0002|
|1697412356-0003|
|6312548982-0004|
----- etc. ------
在我的查询中,我正在尝试基于Ref1中“ - ”右侧的所有内容加入到另一个表格。由于另一个表格中的PK(PackageId)是一个Varchar类型,并且没有前导0,因此我需要修剪掉前导0,否则连接两个Varchar数据类型将失败,因为“0001”!=“1”。
以下是迄今为止我尝试的查询片段:
SELECT * FROM DatabaseNameOne.SchemaOne.FileDetail fd
LEFT OUTER join DatabaseNameTwo.SchemaTwo.Packages p
ON (SUBSTRING(
RIGHT(fd.Ref1, CHARINDEX('-', REVERSE(fd.Ref1) - 1)),
PATINDEX('%[^0]%', RIGHT(fd.Ref1, CHARINDEX('-', REVERSE(fd.Ref1) - 1))),
LEN(RIGHT(fd.Ref1, CHARINDEX('-', REVERSE(fd.Ref1) - 1)))
)
) = p.PackageId
这是我尝试过的另一个查询:
SELECT * FROM DatabaseNameOne.SchemaOne.FileDetail fd
LEFT OUTER JOIN DatabaseNameTwo.SchemaTwo.Packages p
ON (REPLACE(LTRIM(REPLACE(RIGHT(fd.Ref1, CHARINDEX('-', REVERSE(fd.Ref1) - 1)), '0', '')), '', '0')) = p.PackageId
当我运行这两个代码时,我收到了以下错误:
Conversion failed when converting the varchar value to data type int.
我知道可能是我遗漏了一些非常愚蠢的东西,但我已经陷入了死胡同。任何关于此问题的帮助将不胜感激!谢谢!
SELECT CAST(RIGHT('0145972358-0001', 4) AS INT)
的结果是1
,类似这样吗? - Jacob H