Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 使用MSSQL将varchar转换为数值时出错_Sql Server - Fatal编程技术网

Sql server 使用MSSQL将varchar转换为数值时出错

Sql server 使用MSSQL将varchar转换为数值时出错,sql-server,Sql Server,质疑 选择前1000名 当VRI.Square_英尺”时的情况 然后是VRI.Square_英尺 其他的 当VRI.Property_Type='LAND'时的情况 然后将((数字(38,3),VRI.Acres)*43560)转换为十进制) 其他的 VRI.批量大小 结束 结束 从视图\报告\信息\表格中选择VRI 即使我用isnumeric()检查了VRI.Acres,它仍然会产生相同的准确错误?如何解决此问题?ISNUMERIC不保证它将成功转换为十进制 SELECT TOP 1000

质疑

选择前1000名
当VRI.Square_英尺”时的情况
然后是VRI.Square_英尺
其他的
当VRI.Property_Type='LAND'时的情况
然后将((数字(38,3),VRI.Acres)*43560)转换为十进制)
其他的
VRI.批量大小
结束
结束
从视图\报告\信息\表格中选择VRI

即使我用
isnumeric()
检查了
VRI.Acres
,它仍然会产生相同的准确错误?如何解决此问题?

ISNUMERIC
不保证它将成功转换为
十进制

SELECT TOP 1000
CASE WHEN VRI.Square_Footage <> '' 
THEN VRI.Square_Footage 
ELSE 
    CASE WHEN VRI.Property_Type = 'LAND' 
        THEN CAST((CONVERT(NUMERIC(38, 3),VRI.Acres)*43560) AS DECIMAL) 
    ELSE 
        VRI.Lot_Size 
    END 
END
FROM View_Report_Information_Tables AS VRI
此外,
case
语句的所有分支都需要返回兼容的数据类型。看起来像是VRI。平方英尺是一个字符串

这对你有用吗

SELECT ISNUMERIC('£100') /*Returns 1*/

SELECT CONVERT(NUMERIC(38, 3),'£100') /*Error*/

ISNUMERIC
不保证它将成功转换为
decimal

SELECT TOP 1000
CASE WHEN VRI.Square_Footage <> '' 
THEN VRI.Square_Footage 
ELSE 
    CASE WHEN VRI.Property_Type = 'LAND' 
        THEN CAST((CONVERT(NUMERIC(38, 3),VRI.Acres)*43560) AS DECIMAL) 
    ELSE 
        VRI.Lot_Size 
    END 
END
FROM View_Report_Information_Tables AS VRI
此外,
case
语句的所有分支都需要返回兼容的数据类型。看起来像是VRI。平方英尺是一个字符串

这对你有用吗

SELECT ISNUMERIC('£100') /*Returns 1*/

SELECT CONVERT(NUMERIC(38, 3),'£100') /*Error*/
给你这个

SELECT TOP 1000 CASE
                  WHEN ISNUMERIC(VRI.Square_Footage + 'e0') = 1 THEN
                  VRI.Square_Footage
                  WHEN VRI.Property_Type = 'LAND'
                       AND ISNUMERIC(VRI.Acres + 'e0') = 1 THEN CAST((
                  CONVERT(NUMERIC(38, 3), VRI.Acres) * 43560 ) AS DECIMAL)
                  WHEN ISNUMERIC(VRI.Lot_Size + 'e0') = 1 THEN VRI.Lot_Size
                END
FROM   View_Report_Information_Tables AS VRI  
可以转换为浮点数,但不能转换为十进制/数字

 SELECT ISNUMERIC('d25')
如您所见,十进制/数字数据类型不能依赖于数字

查看一些代码,这些代码将向您展示如何在此处检查并运行此

SELECT TOP 1000 CASE
                  WHEN ISNUMERIC(VRI.Square_Footage + 'e0') = 1 THEN
                  VRI.Square_Footage
                  WHEN VRI.Property_Type = 'LAND'
                       AND ISNUMERIC(VRI.Acres + 'e0') = 1 THEN CAST((
                  CONVERT(NUMERIC(38, 3), VRI.Acres) * 43560 ) AS DECIMAL)
                  WHEN ISNUMERIC(VRI.Lot_Size + 'e0') = 1 THEN VRI.Lot_Size
                END
FROM   View_Report_Information_Tables AS VRI  
可以转换为浮点数,但不能转换为十进制/数字

 SELECT ISNUMERIC('d25')
如您所见,十进制/数字数据类型不能依赖于数字


请看一些代码,这些代码将告诉您如何检查

@Martin:谢谢。是的,
VRI.Square\u-cueets
实际上是
varchar
。我如何解决这个问题?这个。不能在同一列中混合使用字符串和数字。其中一个必须转换为另一个。@Jerry Ritchey:这意味着我必须将所有
varchar
转换为十进制?@Chan-混合(非数字)字符串和数字的唯一方法是转换为
sql\u variant
或将数字转换为字符串。你能提供一个失败数据的例子吗?@Conrad Frix:我同意你的看法。不幸的是,这属于SQL团队,我不负责。顺便说一句,我刚刚将它转换回
varchar
,sql查询运行良好。@Martin:谢谢。是的,
VRI.Square\u-cueets
实际上是
varchar
。我如何解决这个问题?这个。不能在同一列中混合使用字符串和数字。其中一个必须转换为另一个。@Jerry Ritchey:这意味着我必须将所有
varchar
转换为十进制?@Chan-混合(非数字)字符串和数字的唯一方法是转换为
sql\u variant
或将数字转换为字符串。你能提供一个失败数据的例子吗?@Conrad Frix:我同意你的看法。不幸的是,这属于SQL团队,我不负责。顺便说一句,我刚刚将其转换回
varchar
,sql查询运行良好。@Conrad Frix:谢谢您的编辑!顺便说一句,你有一个非常酷的化身;)@康拉德·弗里克斯:谢谢你的编辑!顺便说一句,你有一个非常酷的化身;)!