Как я могу привести int к биту в MySQL 5.1?

Я перехожу с SQL Server на MySQL 5.1 и, похоже, споткнулся, пытаясь создать таблицу с помощью инструкции select, чтобы столбец был немного.

В идеале будет работать следующее:

CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit) AS myBit
FROM myOldtable

однако sql очень недоволен литьем как бит. Как я могу сказать, чтобы выбрать столбец int (который, как я знаю, имеет только 0 и 1) Как бит?

4 ответов


нельзя!

CAST и конвертировать только работу в:

  • BINARY [(N)]
  • CHAR [(N)]
  • дата
  • DATETIME
  • DECIMAL [(M [, D])]
  • SIGNED [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

чтобы попробовать его самостоятельно, вы можете создать представление с несколькими преобразованиями, такими как:

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)!!!


попробовать 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);

попробуйте указать длину для типа данных bit.

CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit(1)) AS myBit
FROM myOldtable

попробуйте использовать case:

CREATE TABLE myNewTable AS
SELECT (case myIntThatIsZeroOrOne when 1 then true else false end) AS myBit
FROM myOldtable