2012-10-23 77 views
4

我已经搜索并搜索了解决问题的方案,尽管我已经发现了一些可能有所帮助的方法,但我不确定这是为我做什么的正确方法需要。请记住我正在学习SQL,并且相当新。但我有两个表我想用一个内部连接进行查询。从选择查询的列数据中删除特定字符

这两个表中都有一列名为CAVITY,但它们以不同的格式保存值。一个表保存值为H02,另一个表保存值为2.

我想使用H02格式对此列进行内连接,但不希望更新将值保存为单个表的表号码(用于数据输入目的)。因此,例如,如果一个表列中有H02,另一个表中有2个,我希望它加入。如果一张桌子上有H13,另外一张桌子上有13张,我希望它成为一个连接。所以基本上,我想要删除H和0(但只有在H之后有一个0)。除非有办法做相反的事情,并且从另一个表的结果中添加H/H0。

example data 
table1.cavity table2.cavity 
    H01  = 1 
    H02  = 2 
    H10  = 10 
    H12  = 12 

对我来说,如果我的查询结果是H0版本没关系;我只需要加入工作;我可以适应最终的结果。

我使用SQL Server 2005

我有查询的其余部分,它的工作原理确定;我只需要添加这个额外的连接。请帮忙!任何帮助是极大的赞赏。谢谢

+0

是类型'INT'的'table2.cavity'? –

+0

请详细了解您尝试用于加入的数据类型。 –

回答

4

REPLACE(REPLACE(cavity,'H0',''),'H','')

第一删除H0:

REPLACE(cavity,'H0','')

然后第二替换任何残留的H的:你可以这样做

REPLACE(output_of_previous,'H','')

+0

谢谢!对不起,我花了这么长时间来评论。 – user1768816

0

的一种方法是如下:

from table1 join 
     table2 
     on cast(substring(table1.cavity, 2, 100) as int) = table2.cavity 

(这是假设2意味着table2.cavity被存储为一个整数。

虽然是一个很大的警告。您需要注意查询计划。在编写这样的查询时,使用嵌套循环连接的计划最终很容易。如果你的桌子很小,这不是什么大问题。但是,即使大小适中的表格也可能会产生非常低效的查询计划。

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 
相关问题