sql - 更新 postgresql 中的列

标签 sql postgresql

我发现在一个超过 4 百万条记录的数据库中,我有一个包含错误的字符可变列。它包含数字。每个数字都必须有 12 位数字,但出于某种原因,很多这些数字最终都有 10 位数字。 好消息是,我唯一需要做的就是在每个只有 10 位数字并以数字“22”开头的单元格前添加“55”,而保留 12 位数字的单元格不变。

我的目标是:

UPDATE 
  table 
SET 
  column = CONCAT( '55', column ) 
WHERE 
  LENGTH( column ) = 10 AND column LIKE( '22%');

我正在考虑使用这个:

UPDATE 
  telephones 
SET 
  telephone_number = CONCAT( '55', telephone_number ) 
WHERE 
  LENGTH( telephone_number ) = 10 AND telephone_number LIKE( '22%');

我做的对吗?如果不是,正确的做法是什么

如果数字不是字符串而是存储为 big int,同样的规则适用,它仍然是 10 位长,这意味着数字小于 3.000.000.000 大于 2.000.000.000 怎么办?并且它们都需要是相同的数字,以 55 开头

最佳答案

答案是:是的,没错。您可以尝试使用示例数据库 here on SQL Fiddle .那一个使用 BIGINT 类型。另见 this one by @gmm ,它使用 VARCHAR 形式。两者的工作方式就像您使用原始语法描述它们一样。

关于sql - 更新 postgresql 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945730/

相关文章:

mysql - 在创建 UNIQUE 键之前如何定位重复记录?

postgresql - 如何创建一个循环遍历 PostgreSQL 中另一个函数的函数?

Python:无法连接 str 和 NoneType 对象

用于查找订单最后一个事件状态的 SQL 查询

sql - 如何随机更新行?

sql - 如何找到存储在postgres列中的json大小

postgresql - 如何使用字符串作为 PostgreSQL 咨询锁的键?

sql - PostgreSQL:ORDER BY 和 LIMIT/OFFSET 的奇怪冲突

postgresql - Postgresql查询中的COPY命令

mysql - 如何计算 GROUP_CONCAT 中有多少个逗号分隔值