我已经搜索并搜索了我的问题的解决方案,即使我找到了一些可能有帮助的解决方案,但我不确定这是否是我需要的正确方法。请记住,我正在学习并且对SQL很新。但我有两个表,我想使用内部联接进行查询。
两个表中都有一个名为CAVITY
的列,但它们以不同的格式保存值。一个表将值保存为H02,另一个表将值保持为2。
我想使用H02格式在此列上进行内部联接,但不希望将包含值的表更新为单个数字(用于数据输入)。因此,例如,如果一个表列具有H02而另一个表具有2,则我希望它被连接。如果一个表有H13而另一个有13,我希望它也是一个连接。所以基本上,我想要删除H和0(但只有在0之后直接跟随H)。除非有办法反过来并从另一个表的结果中添加H / H0。
example data
table1.cavity table2.cavity
H01 = 1
H02 = 2
H10 = 10
H12 = 12
如果我的查询结果是H0版本,那对我来说无关紧要;我只需要连接工作;我最终可以接受任何结果。
我正在使用SQL Server 2005
我有其余的查询,它可以正常工作;我只需要添加这个额外的连接。请帮忙!任何帮助是极大的赞赏。谢谢
答案 0 :(得分:4)
REPLACE(REPLACE(cavity,'H0',''),'H','')
第一个删除H0:
REPLACE(cavity,'H0','')
然后第二个替换任何剩余的H:
REPLACE(output_of_previous,'H','')
答案 1 :(得分:0)
您可以这样做的一种方法如下:
from table1 join
table2
on cast(substring(table1.cavity, 2, 100) as int) = table2.cavity
(假设2
表示table2.cavity存储为整数。
但是要小心谨慎。您需要注意查询计划。在编写此类查询时,使用嵌套循环连接最终得到计划非常容易。如果你的桌子很小,这不是什么大问题。但是,即使是中等大小的表也会产生效率极低的查询计划。
答案 2 :(得分:0)
CREATE FUNCTION [dbo].[RemoveAlphaCharacters](@Temp VarChar( 1000))
RETURNS int
AS
BEGIN
WHILE PatIndex ('%[^0-9]%', @Temp) > 0
SET @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '')
RETURN @Temp
END
可以在像这样的连接子句中使用
SELECT a.col1 a, b.col1 b
FROM tablea a JOIN tableb b ON dbo.RemoveAlphaCharacters(a.col1) = b.col1