我在Sql Server中有一个遗留表,其中varchar(5)
列可以是true
或false
。
我想运行一个脚本,基本上将列类型更改为位,然后检查数据并将true
值更改为1
,将其他所有值更改为0
列。
如果重要,表格非常小。谁能帮我一把?
答案 0 :(得分:2)
我会分三步进行转换,如下所示:
UPDATE
varchar(5)
列以下是实现此方法的示例脚本:
create table test(flag varchar(5));
insert into test(flag) values ('true'), ('false'), (null);
-- #1: Add a bit column
alter table test add fbit bit;
-- #2: Copy data using a single `UPDATE`
UPDATE test
SET fbit = CASE
WHEN flag = 'true' THEN 1
WHEN flag = 'false' THEN 0
ELSE NULL
END
-- #3: Drop the varchar(5) column
ALTER TABLE test DROP COLUMN flag
Demo.请注意,SQLFiddle为位列打印true
和false
,但实际数据有点,而不是'true'
/ 'false'
字符串。
答案 1 :(得分:0)
处理比特可能会很痛苦。以下适用于数字类型,但我不确定它是否适用于位:
update t
col = (case when col = 'true' then 1 else 0 end);
alter table t
alter column col bit;
此外,您可以将字符串“true”和“false”直接转换为位,因此如果这些是唯一值,则以下内容应该有效:
alter table t
alter column col bit;
如果这不起作用,那么其他选项是: