Sql server 带isnumeric的T-SQL连接
我有一个数据库,看起来像这样:(嗯,差不多了;p) 表1:Sql server 带isnumeric的T-SQL连接,sql-server,tsql,Sql Server,Tsql,我有一个数据库,看起来像这样:(嗯,差不多了;p) 表1: COL1 int (pk) COL2 bit COL3 int (FK to TABLE2 COL4) COL4 int (pk) COL5 varchar(50) 表2: COL1 int (pk) COL2 bit COL3 int (FK to TABLE2 COL4) COL4 int (pk) COL5 varchar(50) 表2中包含的数据是否为数字取决于位值(1为数字) 如果我运行此查询: SELECT
COL1 int (pk)
COL2 bit
COL3 int (FK to TABLE2 COL4)
COL4 int (pk)
COL5 varchar(50)
表2:
COL1 int (pk)
COL2 bit
COL3 int (FK to TABLE2 COL4)
COL4 int (pk)
COL5 varchar(50)
表2中包含的数据是否为数字取决于位值(1为数字)
如果我运行此查询:
SELECT
CAST(COL5 AS INT)
FROM
TABLE1
INNER JOIN
TABLE2 ON COL4 = COL3 AND COL2 = 1 AND ISNUMERIC(COL5)
我得到一个转换失败错误:
将varchar值“£0.00”转换为数据类型int时,转换失败
不带强制转换的查询不会返回此值,尽管表中有“£0.00”
我的印象是,条件将在演员阵容之前完成,还是我错了(显然)
编辑:
运行:
SELECT CASE WHEN COL5 LIKE '%[^0-9]%' THEN -1
WHEN CAST(COL5 as bigint) > 2147483647 THEN -1
ELSE cast(COL5 as int) END
FROM TABLE1
INNER JOIN TABLE2
ON COL4 = COL3 AND COL2 = 1
执行并返回no
-1
值选择部分中的表达式与连接部分中的表达式无关,因此在选择上强制转换它们不会以任何方式影响连接表达式。但是,如果说在选择
列表之前,上的操作就完成了,您是对的
由于两个col5调用不同且不相关,因此必须重复强制转换:
SELECT cast(COL5 as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND
COL2 = 1 AND
ISNUMERIC(CAST(COL5 AS INT))
SELECT
部分中的表达式与JOIN
s中的表达式无关,因此在SELECT上强制转换这些表达式不会以任何方式影响JOIN表达式。但是,如果说在选择
列表之前,
上的操作就完成了,您是对的
由于两个col5调用不同且不相关,因此必须重复强制转换:
SELECT cast(COL5 as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND
COL2 = 1 AND
ISNUMERIC(CAST(COL5 AS INT))
SELECT
部分中的表达式与JOIN
s中的表达式无关,因此在SELECT上强制转换这些表达式不会以任何方式影响JOIN表达式。但是,如果说在选择
列表之前,
上的操作就完成了,您是对的
由于两个col5调用不同且不相关,因此必须重复强制转换:
SELECT cast(COL5 as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND
COL2 = 1 AND
ISNUMERIC(CAST(COL5 AS INT))
SELECT
部分中的表达式与JOIN
s中的表达式无关,因此在SELECT上强制转换这些表达式不会以任何方式影响JOIN表达式。但是,如果说在选择
列表之前,
上的操作就完成了,您是对的
由于两个col5调用不同且不相关,因此必须重复强制转换:
SELECT cast(COL5 as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND
COL2 = 1 AND
ISNUMERIC(CAST(COL5 AS INT))
实际上这是ISNUMERIC()
例如:“$0.00”、“0.00英镑”、“1e10”
将全部报告为数字,但您无法将其转换为INT
或DECIMAL
相反,请尝试以下方法:
SELECT CAST(CAST(COL5 as money) as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND COL2 = 1 AND ISNUMERIC(COL5)
我有一篇关于ISNUMERIC()
问题的博客文章:
实际上这是ISNUMERIC()的一个问题。
例如:“$0.00”、“0.00英镑”、“1e10”
将全部报告为数字,但您无法将其转换为INT
或DECIMAL
相反,请尝试以下方法:
SELECT CAST(CAST(COL5 as money) as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND COL2 = 1 AND ISNUMERIC(COL5)
我有一篇关于ISNUMERIC()
问题的博客文章:
实际上这是ISNUMERIC()的一个问题。
例如:“$0.00”、“0.00英镑”、“1e10”
将全部报告为数字,但您无法将其转换为INT
或DECIMAL
相反,请尝试以下方法:
SELECT CAST(CAST(COL5 as money) as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND COL2 = 1 AND ISNUMERIC(COL5)
我有一篇关于ISNUMERIC()
问题的博客文章:
实际上这是ISNUMERIC()的一个问题。
例如:“$0.00”、“0.00英镑”、“1e10”
将全部报告为数字,但您无法将其转换为INT
或DECIMAL
相反,请尝试以下方法:
SELECT CAST(CAST(COL5 as money) as int)
FROM TABLE1
INNER JOIN TABLE2 ON COL4 = COL3 AND COL2 = 1 AND ISNUMERIC(COL5)
我有一篇关于ISNUMERIC()
问题的博客文章:
博客上的解释很好。博客上的解释很好。博客上的解释很好。博客上的解释很好。