sql join使用部分字符串匹配

时间:2013-09-16 19:19:21

标签: sql-server tsql

我正在尝试连接两个表,但其中一个表中的数据元素有十进制,我不想在加入两个表时使用小数,因为它们并不多。例如,Customer表中的键是405.02,但在另一个表中它是405.所以在加入时,我只想在句号之前使用所有内容。我该怎么做?谢谢 这是我的代码

 update mytable
 set myField = 'xxx'
 from CustomerTbl
 where CustomerTbl.mainKey = mytable.mainKey

2 个答案:

答案 0 :(得分:2)

如果您的字段是varchar,则可以使用:

SUBSTRING(CustomerTbl.mainKey, 0, CHARINDEX('.', CustomerTbl.mainKey))

如果是十进制/浮点数,则必须先转换它:

SUBSTRING(CAST(CustomerTbl.mainKey AS VARCHAR(10)), 0, CHARINDEX('.', CAST(CustomerTbl.mainKey AS VARCHAR(10))))

您还需要在WHERE子句中使用CAST mytable.mainKey

编辑:SQLFiddle Demo

update mytable
 set myField = 'xxx'
 from CustomerTbl
 where SUBSTRING(CAST(CustomerTbl.mainKey AS VARCHAR(20)), 0, CHARINDEX('.', CAST(CustomerTbl.mainKey AS VARCHAR(20)))) = CAST(mytable.mainKey AS VARCHAR(20))

答案 1 :(得分:0)

UPDATE mytable
SET 
   myField = 'xxx'
FROM 
   CustomerTbl ct
INNER JOIN (
    SELECT leftKey=floor(mainKey)
    FROM mytable
) as upd on upd.leftKey = ct.mainKey

Floor()函数(如果可用)应该为您提供加入小数的左侧。