Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
Sql server 带isnumeric的T-SQL连接_Sql Server_Tsql - Fatal编程技术网

Sql server 带isnumeric的T-SQL连接

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

我有一个数据库,看起来像这样:(嗯,差不多了;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 
    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()
问题的博客文章:

博客上的解释很好。博客上的解释很好。博客上的解释很好。博客上的解释很好。