将位列转换为整数

Posted

技术标签:

【中文标题】将位列转换为整数【英文标题】:Convert bit column to integer 【发布时间】:2012-07-26 11:37:49 【问题描述】:

我正在通过 SQL 脚本将特定表的位列转换为整数(该表对默认值有一些默认约束)。

我必须更改表格的列,而不是运行时强制转换,可以使用什么脚本来完成此操作?

【问题讨论】:

您是否在表格列上定义了任何默认值?为了看到这个尝试查看创建表结构 我认为您不能使用 Management Studio,对吗? 【参考方案1】:

尝试使用CAST(columnName AS INT) AS IntValue

例如

SELECT columnName, CAST(columnName AS INT) AS IntValue
FROM table

或者你可以使用CONVERT(INT, columnName) AS IntValue

更新:如果您需要更改表的实际元数据,那么您首先需要删除约束然后更改列:

ALTER TABLE [Table] DROP CONSTRAINT [ConstraintName];
GO
ALTER TABLE [Table] ALTER COLUMN [ColumnName] INT;

然后重新创建您需要的任何约束。

【讨论】:

编辑了问题请检查我想要 ddl 语句而不是 dml 对于 mysql 使用 SIGNED 而不是 INT。阅读MySQL CAST() Function。【参考方案2】:

如果您担心更改列的数据类型,可以使用 ALTER 查询,如下所示。

ALTER TableName ALTER COLUMN ColumnName INT

否则,仅用于显示目的,您可以使用CASTCONVERT 函数:

CAST(columnName AS INT) AS IntegerVal
CONVERT(int, columnName) AS IntValue

【讨论】:

我已经使用了这个改变脚本,但是当我改变这个表时,它说有一些与列相关的约束并且不能被改变.. 抱歉忘了提你,如果你想改变一个列,该列不应该包含任何值,它的依赖表也【参考方案3】:

SELECT CONVERT(BIT,'False') AS test1 SELECT CONVERT(BIT,'True') AS test2

【讨论】:

【参考方案4】:

我们不能简单地将 BIT 列更改为 INT。所以我建议在表中创建新的整数列,然后使用 CAST,用现有的位值更新新的整数列。最后,您可以从表中删除 BIT 列。

【讨论】:

【参考方案5】:

最后我设法让它工作了:

ALTER TABLE tblname DROP CONSTRAINT DF_tbl_tblname_tblcol
ALTER TABLE tblname ALTER COLUMN tblcol int not null
ALTER TABLE tblname WITH NOCHECK ADD CONSTRAINT [DF_tbl_tblname_tblcol] DEFAULT (0) FOR tblcol

我已使用上述 SQL 语句来更改表列及其构造函数。

【讨论】:

【参考方案6】:

我相信您可以通过使用标准的CAST() 命令将位列提取为整数:

SELECT
  CAS(Bit_Column AS int) AS Int_Column
FROM
  YourTable

但是,我不确定我是否理解您想要实现的目标,如果您提供更多详细信息(例如表的结构及其约束),您可能会得到更好的答案。

【讨论】:

我想更改表的结构,就像我有 broleflag 的位字段,其默认值为 false 现在我想将该列的数据类型从位更改为整数并将默认约束设置为0 现在更清楚了。在这种情况下,您可以查看 ?Esh 发布的答案,它应该可以满足您的需求。您只需将约束添加到 ALTER 命令。 我已经这样做了,但是与该字段关联的默认约束不允许我更改表列.. 能否请您发布表及其约束的 CREATE 脚本以及一些 INSERT 语句?它将允许人们重现您的环境并测试可能的解决方案。谢谢。【参考方案7】:

您收到与默认约束相关的错误。因此,您必须在更改列数据类型之前删除该约束...

尝试这个来找到基于这个表的所有约束(你只需要在你的列上找到适当的默认值)或者使用SQL Server Management Studio(SSMS)为表生成脚本,这将具有默认约束定义。

select * from sys.all_objects where parent_object_id  = object_id('<tablename>')
go

然后首先删除约束,然后更改列并再次添加默认值。

alter table bittoint drop constraint DF__bittoint__col2__45D500F0
go
alter table bittoint alter column col2 int
go
alter table bittoint add constraint DF__bittoint__col2__45D500F0 default 0 for col2
go

【讨论】:

【参考方案8】:

提供的解决方案都不适合我。我不得不使用 Signed 或 Unsigned 而不是 INT 例如

SELECT columnName, CAST(columnName AS SIGNED) AS IntValue 来自表

希望这对新用户有所帮助。

【讨论】:

以上是关于将位列转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

将整数列表转换为整数数组[重复]

Java将整数转换为十六进制整数

C语言中怎么将一个整数字符串转换为一个数

将每行从整数列表转换为整数数组?

编程:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

将整数转换为十六进制和十六进制转换为整数