原谅我..。我是这个领域的新手。我已经在谷歌上搜索过了,但我不能完全确定我找到的信息,因为它并不完全符合我的用例。
在我的数据库中,我有一个包含地址的帐户表。地址分为街道、城市、州、国家和邮政编码。所有内容都是从csv文件导入的,该文件以某种方式剥离了每个数字的前导0...一些邮政编码有前导零(例如newjersey),因此从数据库提取的应用程序在打开这些帐户时会抛出一些错误。该列已经是varchar,所以查找和替换应该非常简单。我只需要将0添加到包含4个字符的字符串中。理论上,我可以只运行以下代码:
UPDATE account SET columnName=postalcodes(nums,5,0);问题是有一小部分账户也有4位数的邮政分机号码。这样做(据我所知)会破坏这些字段……还是我错了?
所以基本上,我该如何在这种情况下进行更新,仅当字段长度为4个字符时才添加一个零?
发布于 2020-06-23 06:36:16
使用lpad()
update account set postal_code = lpad(postal_code, 5, '0')如果字符串长度小于5个字符,则左键添加带有0s的字符串(请注意,如果字符串长度超过5个字符,则将其截断为目标长度)。
发布于 2020-06-24 06:06:08
不确定如何具体提升评论,但spencer7589和GMB提供了帮助。我使用了这个:
SELECT id, shipping_address_postal_code FROM account WHERE CHAR_LENGTH(shipping_address_postal_code) = 4;
UPDATE account SET shipping_address_postal_code = lpad(shipping_address_postal_code, 5, '0') WHERE CHAR_LENGTH(shipping_address_postal_code) = 4;
SELECT id, billing_address_postal_code FROM account WHERE CHAR_LENGTH(billing_address_postal_code) = 4;
UPDATE account SET billing_address_postal_code = lpad(billing_address_postal_code, 5, '0') WHERE CHAR_LENGTH(billing_address_postal_code) = 4;基本上,我确实按照spencer7593的建议进行了选择,以检查哪些数据将被修改。然后,一旦我确信这样做是安全的,我就使用where来挑选包含4个或更少字符的字段--也是spencer7593建议的--以及GMB建议的lpad (因为我误解了我要复制的原始查询)。
谢谢你们!
https://stackoverflow.com/questions/62524541
复制相似问题