如何在MySQL 5.1中转换int?

Zug*_*alt 9 mysql casting bit mysql-5.1

我正在从SQL Server转换到MySQL 5.1,似乎试图使用select语句创建一个表,以便列有点.

理想情况下,以下方法可行:

CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit) AS myBit
FROM myOldtable
Run Code Online (Sandbox Code Playgroud)

然而sql对于转换非常不满意.我怎么能告诉它选择一个int列(我知道只有0和1)作为一个位?

Nun*_*edo 12

你不能!

CAST和CONVERT只适用于:

  • BINARY [(N)]
  • CHAR [(N)]
  • 日期
  • 约会时间
  • DECIMAL [(M [,d])]
  • 签名[INTEGER]
  • 时间
  • UNSIGNED [INTEGER]

没有空间: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
Run Code Online (Sandbox Code Playgroud)

要自己尝试,您可以使用以下几种转换创建视图:

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)
Run Code Online (Sandbox Code Playgroud)

......然后形容它!

DESCRIBE view_bit;
Run Code Online (Sandbox Code Playgroud)

TA-DAH!现在每个人都有点(1)!


小智 5

尝试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);
Run Code Online (Sandbox Code Playgroud)