将 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 更改为 nvarchar?
如何在 Postgresql 中使用 ALTER 将 VARCHAR 类型更改为 DATETIME?