标题不是很明确,所以让我整理一下:

我有一张桌子,看起来像这样:

ID    NAME    EXTID
===================
1     xxxx    1
-------------------
2     aaaa    2
-------------------
3     dddd    ENTR
-------------------
4     ssss    4



ID:整数
名称:varchar(50)
EXTID:varchar(50)


我的Web应用程序允许用户插入行。插入时,用户应精确命名。然后,创建一个ID,并将我设置为列EXTID,它是一个外部ID,与列ID的值相同。然后,用户可以在将来更改EXTID(出于同步目的,但请不要进行无用的说明)。

问题 :

我想获取所有具有相同IDEXTID值的记录。我尝试以下查询:

SELECT  T.*
FROM    myTable T
WHERE   T.ID = T.EXTID


但是我遇到了以下错误:


  无法将int数据类型的varchar值'ENTR'转换为int。


所以我的问题是:是否可以创建像这样的三元表达式:

SELECT   T.*
FROM     myTable T
WHERE    T.ID = (ISNUMERIC(T.EXTID) ? CAST(T.EXTID AS int) : -1)


-1以在强制转换失败的情况下不显示任何行。

最佳答案

这种显式转换将允许转换进行另一种方式,而不是尝试将非数字值隐式转换为int。

SELECT  T.*
FROM    myTable T
WHERE   CAST(T.ID as varchar(50)) = T.EXTID

关于mysql - WHERE子句T-Sql中的三元表达式验证类型字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29253164/

10-13 03:19