GVKun编程网logo

UNION导致“将varchar值转换为int时,转换失败”。(将varchar转换为numeric时出现算法溢出错误)

14

在本文中,我们将为您详细介绍UNION导致“将varchar值转换为int时,转换失败”。的相关知识,并且为您解答关于将varchar转换为numeric时出现算法溢出错误的疑问,此外,我们还会提供一

在本文中,我们将为您详细介绍UNION导致“将varchar值转换为int时,转换失败”。的相关知识,并且为您解答关于将varchar转换为numeric时出现算法溢出错误的疑问,此外,我们还会提供一些关于mysql怎么将varchar转换为int类型、SQL Server 2005将VARCHAR转换为INT,但默认为无效类型、SQL Server 2005将VARCHAR转换为INT,但默认使用无效类型、SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败的有用信息。

本文目录一览:

UNION导致“将varchar值转换为int时,转换失败”。(将varchar转换为numeric时出现算法溢出错误)

UNION导致“将varchar值转换为int时,转换失败”。(将varchar转换为numeric时出现算法溢出错误)

我尝试搜索与此相关的以前的文章,但是找不到适合我情况的文章。而且由于我是StackOverflow的新手,所以我无法发布图片,所以我将尝试对其进行描述。

我有两个数据集。一个是34行,占所有NULLs的1列。其他13行,其中1列为varchars。

当我同时尝试UNION ALL这两个时,出现以下错误:

将varchar值转换为int数据类型时,转换失败。

我不明白为什么会收到此错误。我之前UNION编辑过许多NULL列和varchar许多其他类型的列,但没有得到此转换错误。

谁能提供建议为什么会发生此错误?

答案1

小编典典

发生错误是因为您在两个子查询中都有对应的列,其中一个的类型是整数,另一个的类型是字符。然后,字符值至少在一行中具有一个不能自动转换为整数的值。

这很容易复制:

select t.*from (select ''A'' as col union all      select 1     ) t;

这是相应的SQL Fiddle。

SQL
Server使用相当复杂的类型优先级规则来确定.NET中的目标类型union。但是,实际上,最好避免使用隐式类型转换。而是将列显式转换为所需的类型。

编辑:

NULL价值观的情况很复杂。 就其本身而言 ,该NULL值没有类型。因此,以下工作正常:

select NULL as colunion allselect ''A'';

如果键入NULL,则查询将失败:

select cast(NULL as int) as colunion allselect ''A'';

另外,如果将SQL Server放置在必须分配类型的位置,则SQL
Server将使该NULL整数成为整数。表或结果集中的每一列都需要一个类型,因此这也会失败:

select (select NULL) as colunion allselect ''A'';

也许您的查询正在做这样的事情。

mysql怎么将varchar转换为int类型

mysql怎么将varchar转换为int类型

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本教程操作环境:windows10系统、MysqL8.0.22版本、Dell G3电脑。

MysqL怎么将varchar转换为int类型

MysqL中有两个函数可以进行类型转换:

1.CAST()

MysqL CAST()函数的语法如下:

CAST(expression AS TYPE);

CAST()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED。

2.CONVERT()

MysqL CONVERT()提供一个在不同字符集之间转换数据的方法。

语法是:

CONVERT(expr USING transcoding_name)

在 MysqL中,转换代码名与相应的字符集名相同。

示例如下:

1.手动转化类型(直接+0)

select server_id from cardserver where game_id = 1 order by server_id+0 desclimit 10

2.使用MysqL函数CAST

select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;

3.使用MysqL函数CONVERT

select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED)desc limit 10;

04.png

05.png

推荐学习:mysql视频教程

SQL Server 2005将VARCHAR转换为INT,但默认为无效类型

SQL Server 2005将VARCHAR转换为INT,但默认为无效类型

我在表中有一个varchar(100)列,它包含整数(作为字符串)和非整数字符串的混合.例如.
| dimension varchar(100) |
| '5'                    |
| '17'                   |
| '3'                    |
| 'Pyramids'             |
| 'Western Bypass'       |
| '15'                   |

我怎样才能写一个表达式,例如总结所有有效整数的值?如果我尝试:

-- should return 5 + 17 + 3 + 15 = 40
SELECT
    SUM( CONVERT( INT,dimension ) )
FROM
    mytable

将varchar值’Pyramids’转换为数据类型int时,我会收到转换失败.错误.

是否有我可以在我的表达式中使用的测试,就像ISNULL()函数一样,如果字段不是数字,它允许我指定默认值?

解决方法

试试这个:
SELECT
    SUM(CASE ISNUMERIC(dimension) 
           WHEN 1 THEN CONVERT( INT,dimension ) 
           ELSE 0  
        END)
FROM
    mytable

CASE应检查维度是否为数字 – 如果是,则返回该值.如果它不是数字,则返回默认值(此处:0)

您是否需要经常查询,还可以向表中添加一个持久的计算列,该列封装此计算并存储该值.这样,当求和等等时,你并不总是重新计算这个值:

ALTER TABLE mytable
  ADD NumericValue AS CASE ISNUMERIC(dimension) 
      WHEN 1 THEN CONVERT( INT,dimension ) ELSE 0 END PERSISTED

现在,您可以选择维度,numericvalue FROM mytable并获取这两个值,而无需执行任何计算.

SQL Server 2005将VARCHAR转换为INT,但默认使用无效类型

SQL Server 2005将VARCHAR转换为INT,但默认使用无效类型

我的表中有一个varchar(100)列,其中包含整数(作为字符串)和非整数字符串的混合。例如

| dimension varchar(100) || ''5''                    || ''17''                   || ''3''                    || ''Pyramids''             || ''Western Bypass''       || ''15''                   |

如何写一个表达式,例如将所有有效整数的值求和?如果我要尝试:

-- should return 5 + 17 + 3 + 15 = 40SELECT    SUM( CONVERT( INT, dimension ) )FROM    mytable

我会收到一个Conversion failed when converting the varchar value ''Pyramids'' to datatype int.错误。

与该ISNULL()函数类似,是否可以在表达式中使用一个测试,如果该字段不是数字,该测试允许我指定默认值?

答案1

小编典典

试试这个:

SELECT    SUM(CASE ISNUMERIC(dimension)            WHEN 1 THEN CONVERT( INT, dimension )            ELSE 0          END)FROM    mytable

CASE应检查是否dimension为数字-如果是,则返回该值。如果不是数字,则返回默认值(此处:0)

是否需要经常查询,也可以向表中添加一个持久化的计算列,该列封装了该计算并存储了值。这样,在进行求和等操作时,您不必总是重新计算值:

ALTER TABLE mytable  ADD NumericValue AS CASE ISNUMERIC(dimension)       WHEN 1 THEN CONVERT( INT, dimension ) ELSE 0 END PERSISTED

现在,您可以SELECT dimension, numericvalue FROM mytable获取两个值,而不必执行任何计算。

SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败

SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败

declare @a varchar(40)set @a=''1.23e-4''declare @b decimal(27,12)if isnumeric(@a) =1begin    select @b=cast(@a as decimal(27,12))endelsebegin    select @b=-1endselect @b

在SQL 2005环境下执行以上sql代码时,出现以下错误。

将数据类型varchar转换为数值时出错

有人知道为什么吗?

谢谢。

答案1

小编典典
SELECT  @b = CONVERT(REAL, @a, 2)

科学记数法仅适用于FLOATREAL

关于UNION导致“将varchar值转换为int时,转换失败”。将varchar转换为numeric时出现算法溢出错误的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于mysql怎么将varchar转换为int类型、SQL Server 2005将VARCHAR转换为INT,但默认为无效类型、SQL Server 2005将VARCHAR转换为INT,但默认使用无效类型、SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败等相关知识的信息别忘了在本站进行查找喔。

本文标签: