Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中具有脏数据的三个表的内部联接_Sql_Sql Server - Fatal编程技术网

SQL Server中具有脏数据的三个表的内部联接

SQL Server中具有脏数据的三个表的内部联接,sql,sql-server,Sql,Sql Server,我有三张桌子,T1,T2,T3 T1有A、B、C列 T2有C、D、E列 T3有E、F、G列 其思想是将所有列进行内部联接,以获得带有列A、B、C、D、E、F、G的表T 我现在已经知道如何连接三个表了,问题是应该连接T2和T3的列E非常嘈杂,它应该是一个数值,但它有各种各样的值(文本、标点符号等) 如何使用if语句进行内部联接 以下是E列的示例: 在表T2中:10000001、$4542、$1892348、2347239(噪音为$4542和“.”) 在表T3中:100000018923482

我有三张桌子,T1,T2,T3

  • T1有A、B、C列
  • T2有C、D、E列
  • T3有E、F、G列
其思想是将所有列进行内部联接,以获得带有列A、B、C、D、E、F、G的表T

我现在已经知道如何连接三个表了,问题是应该连接T2和T3的列E非常嘈杂,它应该是一个数值,但它有各种各样的值(文本、标点符号等)

如何使用if语句进行内部联接

以下是E列的示例:

  • 在表T2中:10000001、$4542、$1892348、2347239(噪音为$4542和“.”)
  • 在表T3中:100000018923482347239(表3相当干净)

其想法是只匹配数字值,但标准联接中断,因为它无法将$4542转换为int,用户在进行联接以消除非数字值时尝试转换。我处理了t2上的坏数据,但您也可以将其扩展到其他表


你能澄清一件事吗。您希望排除嘈杂的记录,还是需要在删除特殊字符后加入记录


我相信这可以通过案例和patindex来实现

提供样本数据和期望的结果。您能否提供E列的示例,以便我们更好地提供帮助?您可以使用值替换或条件大小写作为联接条件,尽管性能会受到影响,但在不知道数据差异程度的情况下,这将很难提供帮助。非数字字符集是否可以预测并固定不变?换句话说,它是不是一组像“$”、“,”或者“u”这样的字符?如果是这样的话,您可以很容易地去掉那些已知的字符来进行连接。然而,如果它是不可预测的,或者是一个非常大的集合,那将是非常笨拙的。不管怎样,你的表现都会很差。
Select * from t2 inner join t3
ON t2.E=T3.E and
TRY_CAST(t2.E As INT) IS NOT NULL