Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Mysql WHERE子句T-Sql中的三元表达式验证类型字段_Mysql_Sql Server - Fatal编程技术网

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

Mysql WHERE子句T-Sql中的三元表达式验证类型字段,mysql,sql-server,Mysql,Sql Server,标题并不明确,所以让我澄清一下: 我有一张这样的桌子: ID NAME EXTID =================== 1 xxxx 1 ------------------- 2 aaaa 2 ------------------- 3 dddd ENTR ------------------- 4 ssss 4 ID:int 名称:varchar(50) EXTID:varchar(50) 我的web应用允许用户插

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

我有一张这样的桌子:

ID    NAME    EXTID
===================
1     xxxx    1
-------------------
2     aaaa    2
-------------------
3     dddd    ENTR
-------------------
4     ssss    4
  • ID:int
  • 名称:varchar(50)
  • EXTID:varchar(50)
我的web应用允许用户插入行。插入时,用户应精确指定名称。然后,创建一个
ID
,我将其设置为
EXTID
列,这是一个外部ID,与列
ID
的值相同。然后,用户可以在将来更改
EXTID
(用于同步目的,但不要落入无用的解释中)

问题:

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

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以在强制转换失败的情况下不显示行。

此显式强制转换将允许转换以另一种方式进行,而不是尝试将非数值隐式转换为int

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

为什么不将int转换为
varchar(50)
?它工作得很好!请你回答好吗?因此,三元表达式在Sql或t-Sql中不存在?我认为您尝试应用的逻辑将是一个case语句:
case当ISNUMERIC(t.EXTID)=1然后强制转换(t.EXTID为int)否则-1 END
但是仍然可能产生错误的结果,因为
ISNUMERIC()
并不意味着可以正确转换为int,IE
1.5