为什么此TSQL LIKE语句不能总是找到逗号?

时间:2018-08-31 02:12:00

标签: sql sql-server tsql

我希望这在ApptIdList为'12345'时加入,而在ApptIDList为'12345,67890'时不加入

SELECT *
FROM WAITINGROOM a
LEFT JOIN APPOINTMENTS b on b.ApptId = (CASE WHEN (a.ApptIdList LIKE '%,%') THEN -1 ELSE CONVERT(INT, a.ApptIdList) END)

WAITINGROOM.ApptIdList列是一个用逗号分隔的字符串列表,它与int键APPOINTMENTS.ApptId匹配

(是的,我知道这是设计数据库的一种不好的方法。它不是我的数据库,所以我不能更改它。)

这似乎对我的数据库副本有效,但是在某些用户的数据库上它会抛出类似错误

  

将varchar值'236656,236655'转换为时转换失败   数据类型int

在我看来,这就像在某些计算机上显示的'236656,236655'这样的'%,%'是错误的,这对我来说非常令人惊讶,而且我还没有找到在我的计算机上重现该行为的方法。那有可能吗?还是在发生什至陌生的事情?

我正在使用SQL Server 2008 R2。用户具有各种版本,所有版本均为2008 R2或更高版本。

1 个答案:

答案 0 :(得分:2)

从另一个方向进行转换:

SELECT *
FROM WAITINGROOM wr LEFT JOIN
     APPOINTMENTS a
     ON wr.ApptIdList + ',' LIKE CAST(a.ApptId as VARCHAR(255)) + ',%';

在朝着这个方向进行转换时,不会有转换失败的危险。