Sql 从select查询的列数据中删除特定字符

Sql 从select查询的列数据中删除特定字符,sql,sql-server-2005,join,trim,Sql,Sql Server 2005,Join,Trim,我一直在寻找解决我问题的方法,尽管我已经找到了一些可能有用的方法,但我不确定这是否是满足我需要的正确方法。请记住,我正在学习SQL,而且对SQL还相当陌生。但我有两个表要使用内部联接进行查询 两个表中都有一个名为cave的列,但它们的值格式不同。一个表的值为H02,另一个表的值为2 我想使用H02格式对该列进行内部联接,但不想更新将值作为单个数字保存的表(用于数据输入目的)。例如,如果一个表列有H02,另一个表列有2,我希望它被联接。如果一个表有H13,另一个表有13,我希望它也是一个连接。所以

我一直在寻找解决我问题的方法,尽管我已经找到了一些可能有用的方法,但我不确定这是否是满足我需要的正确方法。请记住,我正在学习SQL,而且对SQL还相当陌生。但我有两个表要使用内部联接进行查询

两个表中都有一个名为
cave
的列,但它们的值格式不同。一个表的值为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版本对我来说并不重要;我只需要连接来工作;我最终可以接受这两种结果

我正在使用SQLServer2005

我有查询的其余部分,它工作正常;我只需要添加这个额外的连接。请帮忙!非常感谢您的帮助。谢谢

替换(替换(空腔,'H0','','H','')

第一个删除H0:

更换(空腔,'H0','')

然后第二个替换任何剩余的H:


替换(前一个的输出,'H','')
一种方法如下:

 from table1 join
      table2
      on cast(substring(table1.cavity, 2, 100) as int) = table2.cavity
(这是假设
2
表示表2.1存储为整数

不过需要注意的是,您需要注意查询计划。在编写此类查询时,很容易得到一个使用嵌套循环联接的计划。如果表很小,这也没什么大不了的。但是,即使是中等大小的表也可能产生效率极低的查询计划

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
在join子句中可以这样使用

SELECT a.col1 a, b.col1 b
FROM tablea a JOIN tableb b ON dbo.RemoveAlphaCharacters(a.col1) = b.col1

是否为
表2。类型为
INT
的腔
?请详细说明您尝试用于加入的数据类型。谢谢!抱歉,我花了这么长时间才发表评论。