我正在从SQL Server过渡到MySQL 5.1,似乎在尝试使用select语句创建包含位字段的表时遇到了问题。
理想情况下,以下语句应该有效:
CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit) AS myBit
FROM myOldtable
然而,将int列强制转换为bit时,SQL非常不满意。我该如何告诉它将一列int(我知道只有0和1)选择为bit?
我正在从SQL Server过渡到MySQL 5.1,似乎在尝试使用select语句创建包含位字段的表时遇到了问题。
理想情况下,以下语句应该有效:
CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit) AS myBit
FROM myOldtable
然而,将int列强制转换为bit时,SQL非常不满意。我该如何告诉它将一列int(我知道只有0和1)选择为bit?
无法这样做!
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;
塔达!!现在每个人都有点兴奋啦!!!
CONV(N, from_base, to_base)
函数。CONV()
函数具有64位精度。select CONV(9, 10, 2);
尝试使用 case:
CREATE TABLE myNewTable AS
SELECT (case myIntThatIsZeroOrOne when 1 then true else false end) AS myBit
FROM myOldtable