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