将 varchar 更改为 bigint

Posted

技术标签:

【中文标题】将 varchar 更改为 bigint【英文标题】:Change varchar to bigint 【发布时间】:2019-08-15 17:06:44 【问题描述】:

目前我有一个加载表格的包。但是,我想将 productnumber 字段更改为当前为 varchar 的 bigint。我还想为旧产品编号创建一个新列。所以目前它看起来像这样:

产品编号:1827493849,PN19379247

如您所见,产品编号中包含非数字,这就是为什么我想要一个列来存储旧编号,例如它们当前的编号。但我的目标是创建一个列来存储这两个数字以及更多的数字,它会关闭领先的 PN。有人可以举例说明这是如何完成的。目前,我创建了一个新表,ProductNumber 为 bigint,OldNumer 为 varchar,该表为空。我希望它能够在 OldNumber 下存储帐号,然后将它们插入到另一列中,去掉前导 PN。在插入到 ProductNumber 列之前必须删除 PN,因为它是一个 bigint。非常感谢您的帮助。

【问题讨论】:

您的值是否始终为 2 个值,以逗号分隔,第二个值始终以 'PN' 为前缀? @Larnu 我在该列中有许多值,这只是我当前正在查看的值的示例。我有一些是数字的,还有一些带有前导 PN。 所以他们一行可以包含超过2个分隔值?更多的样本数据在这里非常有用;特别是如果您有不同数量的值。为什么你首先要存储分隔值?如果是这样,你真的需要重新考虑你的设计。 @Larnu 只有一行可以有一个值 我用逗号分隔两者,意思是一个在一行,另一个在另一行 PN1827382739 182789374934 394759847304 PN9375495793 【参考方案1】:

我不会为此推荐bigint。而是使用适当长度的numeric

如果你想通过去除前两个字符来转换字符串,你可以使用stuff()

select try_convert(numeric(20), stuff(productnumber, 1, 2, ''))

如果您不知道号码从哪里开始,请使用patindex() 查找:

select try_convert(numeric(20), stuff(productnumber, 1, patindex('%[0-9]%', productnumber) - 1, ''))

【讨论】:

以上是关于将 varchar 更改为 bigint的主要内容,如果未能解决你的问题,请参考以下文章

将带有数字的列的类型从 varchar 更改为 int

如何将复合键列类型从 varchar 更改为 nvarchar?

Oracle:将 VARCHAR2 列更改为 CLOB

如何在 Postgresql 中使用 ALTER 将 VARCHAR 类型更改为 DATETIME?

Postgresql - 将 varchar 列的大小更改为较低的长度

将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有啥问题吗?