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)
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,IE1.5