使用“ as”关键字的表别名会影响数据类型吗?

杰克

我使用以下查询:

select id from foo order by id DESC limit 1

返回上一次id使用的。

我的应用程序中有一些要加的东西,如果不是零的话,还要加一。工作正常。但是我决定在sql中而不是C#代码中执行此操作。但是当我这样做时:

 SELECT IF(id = 0, 0, id + 1) as id from foo order by id DESC limit 1

但是我遇到一个System.InvalidCastException错误,令我惊讶的是,下面的代码中打印的数据类型是int64。但是改变了吗?

这是c#代码:

public int GetLastID()
        {
            using (MySqlConnection con = Open())
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    cmd.CommandText = "SELECT IF(id = 0, 0, id + 1) as id from foo order by id DESC limit 1";
                    cmd.Connection = con;
                    con.Open();

                    MySqlDataReader data = cmd.ExecuteReader();

                    if (!data.Read())
                        return 0;

                    System.Windows.Forms.MessageBox.Show(data["id"].GetType().ToString()); // output: int64
                    return (int)data["id"];
                }
            }
        }

不要怪我的MySQL不好。我用的不多。如果您知道更好的方法,请告诉我!

spencer7593

分配给列(AS id的别名不会更改数据类型。

表达式的数据类型是表达式的结果。

在MySQL中,整数加法运算(例如id + 1,其中id是整数类型)导致BIGINT

这种行为在(现成的)MySQL参考手册中有记录,网址为https : //dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html

摘抄:


  • 可以使用通常的算术运算符。根据以下规则确定结果:

,,和的情况下-如果两个操作数均为整数,则将(64位)精度计算结果+*BIGINT


因此,返回BIGINT数据类型(64位整数)是预期的行为。

如果您的要求是返回32位整数,则唯一的解决方法(我知道)是创建用户定义的函数,例如

  DELIMITER $$

  CREATE FUNCTION udf_bigint_to_int(n BIGINT)
  RETURNS INTEGER
  BEGIN
    RETURN n;
  END$$

  DELIMITER ;

为了证明这是可行的,并且作为有关行为的警告,我们传入的值大于32位整数可以支持的值,我们可以运行以下命令:

  SELECT udf_bigint_to_int(9876543210+9)

返回32位整数的最大值:

  udf_bigint_to_int(9876543210+9)
  -------------------------------
                       2147483647

如果id要从表中获取最大值,然后将其加1,然后将其作为32位整数返回,则在创建用户定义的函数后,可以使用如下查询:

 SELECT udf_bigint_to_int( MAX(id) + ABS(SIGN( MAX(id) ))) AS id FROM foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用'this'关键字是否会影响Java性能?

来自分类Dev

使用'this'关键字是否会影响Java性能?

来自分类Dev

已知数据类型时使用var关键字

来自分类Dev

使用dynamic关键字强制转换泛型类型会导致装箱吗?

来自分类Dev

在razor视图引擎中使用var关键字作为变量,而不是使用显式数据类型进行声明

来自分类Dev

使用关键字别名的Firebird查询

来自分类Dev

我可以不使用“ as”关键字来使用MySQL别名吗

来自分类Dev

如何使用'as'关键字为Oracle中的表添加别名?

来自分类Dev

使用SQL关键字作为列的别名

来自分类Dev

数据表-在两个不同的上下文中使用'this'关键字

来自分类Dev

使用jpa使用关键字搜索数据库

来自分类Dev

使用jpa使用关键字搜索数据库

来自分类Dev

如何使用Python NLP从数据库表中提取与搜索字符串中的关键字匹配的关键字

来自分类Dev

类型错误:在函数中使用“ this”关键字的“ Not a function”

来自分类Dev

我应该为“类型”使用哪个关键字

来自分类Dev

这是对“ this”关键字的不明智使用吗?

来自分类Dev

def关键字在Groovy中使用更多空间吗?

来自分类Dev

这是对“ this”关键字的不明智使用吗?

来自分类Dev

可以在特征上使用'new'关键字吗?

来自分类Dev

我在课堂上正确使用了this关键字吗?

来自分类Dev

如何使用Spark在文本表中查找关键字?

来自分类Dev

如何使用“ |” Specflow功能表中的关键字

来自分类Dev

使用SQL关键字列创建SQL表

来自分类Dev

连接两个表后使用 NOT IN 关键字

来自分类Dev

解析行数据直到使用pyparsing的关键字

来自分类Dev

Elasticsearch 使用关键字对数据进行排序

来自分类Dev

使用参数化查询会导致数据类型不匹配。有任何想法吗?

来自分类Dev

如何使用IN关键字?

来自分类Dev

使用IN关键字查询

Related 相关文章

  1. 1

    使用'this'关键字是否会影响Java性能?

  2. 2

    使用'this'关键字是否会影响Java性能?

  3. 3

    已知数据类型时使用var关键字

  4. 4

    使用dynamic关键字强制转换泛型类型会导致装箱吗?

  5. 5

    在razor视图引擎中使用var关键字作为变量,而不是使用显式数据类型进行声明

  6. 6

    使用关键字别名的Firebird查询

  7. 7

    我可以不使用“ as”关键字来使用MySQL别名吗

  8. 8

    如何使用'as'关键字为Oracle中的表添加别名?

  9. 9

    使用SQL关键字作为列的别名

  10. 10

    数据表-在两个不同的上下文中使用'this'关键字

  11. 11

    使用jpa使用关键字搜索数据库

  12. 12

    使用jpa使用关键字搜索数据库

  13. 13

    如何使用Python NLP从数据库表中提取与搜索字符串中的关键字匹配的关键字

  14. 14

    类型错误:在函数中使用“ this”关键字的“ Not a function”

  15. 15

    我应该为“类型”使用哪个关键字

  16. 16

    这是对“ this”关键字的不明智使用吗?

  17. 17

    def关键字在Groovy中使用更多空间吗?

  18. 18

    这是对“ this”关键字的不明智使用吗?

  19. 19

    可以在特征上使用'new'关键字吗?

  20. 20

    我在课堂上正确使用了this关键字吗?

  21. 21

    如何使用Spark在文本表中查找关键字?

  22. 22

    如何使用“ |” Specflow功能表中的关键字

  23. 23

    使用SQL关键字列创建SQL表

  24. 24

    连接两个表后使用 NOT IN 关键字

  25. 25

    解析行数据直到使用pyparsing的关键字

  26. 26

    Elasticsearch 使用关键字对数据进行排序

  27. 27

    使用参数化查询会导致数据类型不匹配。有任何想法吗?

  28. 28

    如何使用IN关键字?

  29. 29

    使用IN关键字查询

热门标签

归档