如何有条件地将前导零添加到数字列中?

sxissh06  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(227)

原谅我。。。我是这个领域的笨蛋。我已经在google上搜索过了,但是我不能完全确定我找到的信息,因为它与我的用例不完全匹配。
在我的数据库中,我有一个带有地址的accounts表。地址分为街道、城市、州、国家和邮政编码。所有东西都是从一个csv文件中导入的,这个文件在每个数字上都去掉了前导的0。。。一些邮政编码有前导零(例如新泽西州),因此从数据库中提取的应用程序在打开这些帐户时抛出一些错误。列已经是varchar,因此查找和替换应该非常简单。我只需要将零添加到包含4个字符的字符串中。理论上,我可以这样做:

UPDATE account SET columnName=postalcodes(nums,5,0);

问题是,少数账户也有4位数的邮政分机。这样做(据我所知)会破坏那些领域。。。还是我错了?
所以基本上,在这种情况下,我该如何做一个更新,仅当字段长度为4个字符时才添加一个零?

mf98qq94

mf98qq941#

使用 lpad() :

update account set postal_code = lpad(postal_code, 5, '0')

这左垫线 0 如果长度小于5个字符,则返回s(请注意,如果字符串长度超过5个字符,则会截断为目标长度)。

de90aj5v

de90aj5v2#

不知道如何具体地对评论进行投票,但斯宾塞7589和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;

基本上,我确实按照斯宾塞7593的建议选择了要修改的数据。一旦我确信这样做是安全的,我就使用where来挑选4个字符或更少的字段(也是由spencer7593建议的)和gmb建议的lpad(因为我误解了我复制的原始查询)。
谢谢你们!

相关问题