【问题标题】:Adding a leading zero via update query in Access table通过 Access 表中的更新查询添加前导零
【发布时间】:2019-12-25 19:33:22
【问题描述】:

我有一个表格,其中有一列包含存储为文本的 3 位邮政编码,其中一些存储为 2 位邮政编码,因为缺少前导零。我想为 2 位数的拉链添加缺少的前导零。

我尝试了下面的查询,但有很多错误,结果不准确。是否应该使用 if 语句来检查长度是否为 2 个字符然后与 0 连接?还是其他方式?

这是我尝试过的:

Update TABLE set ZIPS = string(3 - len(ZIPS),"0")

我收到以下错误消息:

由于类型转换失败,MS Access 未更新 1930 个字段,由于键违规,0 条记录,由于锁违规,0 条记录,o 由于验证规则违规。

【问题讨论】:

  • Update TABLE set ZIPS = ZIPS & "0" WHERE Len(ZIPS) = 2. 先备份当前数据,先运行SELECT语句检查是否返回预期数据:SELECT ZIPS FROM TABLE WHERE Len(ZIPS) = 2
  • 其实,ZIPS = "0" & ZIPS WHERE Len(ZIPS)=2。如果要使用 String():ZIPS = String(3 - len(ZIPS),"0") & ZIPS.
  • @June,正确的。我混淆了尾随和领先。不明白为什么这个问题被关闭了。似乎 Stackoverflow 又变得更加“粗鲁”了。
  • 我也没有。我提名重新开放。
  • 我明白它为什么关闭了,它没有提供minimal reproducible example。对于类型转换失败,应提供表定义,以及是否存在空值。此外,提供的查询会将字段设置为仅为零而不是添加零,这很奇怪

标签: sql ms-access


【解决方案1】:

最简单的方法是使用函数FORMAT()

update tablename
set zips = format(zips, '000')
where len(zips) < 3

对于这些值:

zips
1
15
13
100
99
8

结果将是:

zips
001
015
013
100
099
008

【讨论】:

    【解决方案2】:

    有很多方法可以实现这一点,我可能会建议:

    update YourTable set zips = "0" & zips where zips like "??"
    

    或者,如果您想在不更新存储值的情况下输出 3 位数字,则以下方法很有用:

    select right("000" & zips, 3) from YourTable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多