Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Php 如何强制列别名为特定数据类型?_Php_Mysql_Sql - Fatal编程技术网

Php 如何强制列别名为特定数据类型?

Php 如何强制列别名为特定数据类型?,php,mysql,sql,Php,Mysql,Sql,我在选择中有一个别名,如下所示: SELECT CASE .... WHEN 1 THEN somefield * -10 WHEN 0 THEN somefield * 10 END as myAlias FROM .... 问题是mysql在查找第一条记录时,将“myAlias”标记为未签名 但在下一条记录中,同一个别名会生成一个带符号的整数,那么我有一个错误: BIGINT UNSIGNED value is out of range in....

我在选择中有一个别名,如下所示:

SELECT
    CASE ....
    WHEN 1 THEN somefield * -10
    WHEN 0 THEN somefield * 10
    END as myAlias
FROM
    ....
问题是mysql在查找第一条记录时,将“myAlias”标记为未签名 但在下一条记录中,同一个别名会生成一个带符号的整数,那么我有一个错误:

BIGINT UNSIGNED value is out of range in....
那么,在mysql执行任何操作之前,如何告诉它“myAlias”是有符号整数呢

谢谢

编辑:

我试过了

SELECT
    CAST(CASE ....
    WHEN 1 THEN somefield * -10
    WHEN 0 THEN somefield * 10
    END AS SIGNED) as myAlias
FROM
    ....
没有成功

尝试使用“cast()”函数:

例:
从myfield=cast的mytable中选择*(somefield为无符号整数)
尝试使用“cast()”函数:

例:
select*from mytable where myfield=cast(somefield为无符号整数)

我假设表中的字段声明为
无符号整数。在这种情况下,您必须在
case
表达式的
THEN
子句中键入cast字段。下面的示例演示了一个示例

创建和插入脚本: 在THEN子句中键入字段: 输出:

编写上述查询的替代方法: 输出:

没有类型转换字段: 错误:

数据截断:BIGINT无符号值超出了“(
db_5b3bb
mytable
numberfield
*-(10))”的范围:选择大小写位域,当1时选择numberfield*-10,当0时选择numberfield*10作为mytable中的myAlias结束


我假设表中的字段声明为
无符号整数
。在这种情况下,您必须在
case
表达式的
THEN
子句中键入cast字段。下面的示例演示了一个示例

创建和插入脚本: 在THEN子句中键入字段: 输出:

编写上述查询的替代方法: 输出:

没有类型转换字段: 错误:

数据截断:BIGINT无符号值超出了“(
db_5b3bb
mytable
numberfield
*-(10))”的范围:选择大小写位域,当1时选择numberfield*-10,当0时选择numberfield*10作为mytable中的myAlias结束


建议:然后尝试使用MyAlias的强制转换建议:然后尝试使用MyAlias的强制转换
somefield
的类型是什么?somefield
的类型是什么?谢谢!真的很有帮助,现在SQL更简洁了!!再次感谢!谢谢真的很有帮助,现在SQL更简洁了!!再次感谢!
CREATE TABLE mytable
(
     numberfield INTEGER UNSIGNED
   , bitfield BIT
);

INSERT INTO mytable (numberfield, bitfield) VALUES
  (134, 1),
  (673, 0),
  (855, 1),
  (133, 0),
  (778, 1),
  (234, 0);
SELECT
    CASE bitfield
        WHEN 1 THEN CAST(numberfield AS SIGNED) * -10
        WHEN 0 THEN CAST(numberfield AS SIGNED) * 10
    END as myAlias
FROM mytable
MYALIAS
-------
-1340
6730
-8550
1330
-7780
2340
SELECT
    CAST(numberfield AS SIGNED) * 
    (
        CASE bitfield
            WHEN 1 THEN -10
            WHEN 0 THEN 10
        END
    ) as myAlias
FROM mytable
MYALIAS
-------
-1340
6730
-8550
1330
-7780
2340
SELECT
    CASE bitfield
      WHEN 1 THEN numberfield * -10
      WHEN 0 THEN numberfield * 10
    END as myAlias
FROM mytable