我正在从 SQL Server 过渡到 MySQL 5.1,并且似乎在尝试使用 select 语句创建表时被绊倒了,因此该列有点。
理想情况下,以下方法会起作用:
CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit) AS myBit
FROM myOldtable
但是 sql 对强制转换有点不满意。我怎么能告诉它选择一个 int 列(我知道它只有 0 和 1)?
你不能!
CAST 和 CONVERT 仅适用于:
没有空间:BIT,BITINT,TINYINT,MEDIUMINT,BIGINT,SMALLINT,...
但是,您可以创建自己的函数 cast_to_bit(n):
DELIMITER $$
CREATE FUNCTION cast_to_bit (N INT) RETURNS bit(1)
BEGIN
RETURN N;
END
要自己尝试,您可以创建具有多种转换的视图,例如:
CREATE VIEW view_bit AS
SELECT
cast_to_bit(0),
cast_to_bit(1),
cast_to_bit(FALSE),
cast_to_bit(TRUE),
cast_to_bit(b'0'),
cast_to_bit(b'1'),
cast_to_bit(2=3),
cast_to_bit(2=2)
...然后描述它!
DESCRIBE view_bit;
哒哒!!现在每个人都有点(1)!!!
尝试使用案例:
CREATE TABLE myNewTable AS
SELECT (case myIntThatIsZeroOrOne when 1 then true else false end) AS myBit
FROM myOldtable
尝试CONV(N,from_base,to_base)
在不同的数字基数之间转换数字。返回数字 N 的字符串表示形式,从基础 from_base 转换为基础 to_base。如果任何参数为 NULL,则返回 NULL。参数 N 被解释为整数,但可以指定为整数或字符串。最小基数为 2,最大基数为 36。如果 to_base 为负数,则将 N 视为有符号数。否则,N 被视为无符号。CONV()
以 64 位精度工作。
例如。
select CONV(9, 10, 2);