WHERE子句T-Sql中的三元表达式验证类型字段

时间:2015-03-25 10:31:11

标签: mysql sql-server

标题不是很明确,所以让我澄清一下:

我有一张看起来像这样的表:

ID    NAME    EXTID
===================
1     xxxx    1
-------------------
2     aaaa    2
-------------------
3     dddd    ENTR
-------------------
4     ssss    4
  • ID :int
  • NAME :varchar(50)
  • EXTID :varchar(50)

我的网络应用允许用户插入行。插入时,用户应该精确命名。然后,创建ID,并设置为EXTID列,这是一个外部ID,与列ID的值相同。然后,用户可以在将来更改EXTID(出于同步目的,但不要使用无用的解释)。

问题:

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

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

但是我收到了以下错误:

  

无法在int数据类型中转换varchar值'ENTR'。

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

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

-1,在演员表失败的情况下不显示任何行。

1 个答案:

答案 0 :(得分:0)

此显式转换将允许转换以其他方式转换,而不是尝试隐式地将非数字值转换为int。

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