【问题标题】:How can I keep leading zeros when concatenating two numbers together in a query?在查询中将两个数字连接在一起时如何保持前导零?
【发布时间】:2014-08-15 16:00:41
【问题描述】:

问题

在 Access 查询中将两个数字连接在一起时如何保持前导零?

表格

FileYear | FileIteration
------------------------ 
14       | 0001
14       | 0002
14       | 0003
14       | 0004

FileIteration 的格式为“0000”,但仍以整数形式存储)

查询

SELECT MAX(FileYear & FileIteration)
FROM FileNumber
WHERE FileYear=Format(Date(),"yy");

当前(错误)输出

144

它不会保留前导零。

期望的输出

140004

我希望它保持前导零。

【问题讨论】:

  • FileIteration 和 FileYear 的数据类型有哪些
  • @rontornambe FilteIteration 是一个整数(如问题所述),FileYear 来自Format(Date(),"yy")。 (INSERTed before)作为整数工作(据我所知)
  • 如果 FileInteration 是一个整数,你如何显示 0004 的值?前导零不会被自动截断吗?
  • @rontornambe Nope。添加“0000”格式会强制它有四个数字。 ("Numérique" = "Number")

标签: sql ms-access ms-access-2007


【解决方案1】:

使用Format 函数是我认为的“正确”方法,尽管在这种情况下有很多方法可以实现您想要的。

Format() 的输出将是一个字符串

SELECT MAX(FileYear & Format(FileIteration,"0000"))
FROM FileNumber
WHERE FileYear=Format(Date(),"yy");

【讨论】:

  • 我喜欢这种方法并同意它比我建议的更好(更通用)。
  • 谢谢,我更喜欢这种方法,因为如果 FileIteration 高于 9999,那么它不会在年份中添加“1”。
【解决方案2】:

如果始终是 4 位数字,您可以这样做:

Fileyear * 10000 + FileIteration

如果位数是动态的,我们假设它在 NoOfDigits 列中:

Fileyear * 10 ^ NoOfDigits + FileIteration

【讨论】:

    【解决方案3】:

    您的查询的一个可能的 Access SQL 语句,假设 4 位 FileIteration 是:

    SELECT Max(([FileYear]*1000)+[FileIteration]) AS Answer
    FROM FileNumber
    WHERE ((([FileYear])=Format(Date(),"yy")));
    

    【讨论】:

      【解决方案4】:

      在连接之前将它们转换为字符串:

      CStr(Fileyear) & CStr(FileIteration)
      

      【讨论】:

      • 在 MS Access 中,"CStr(Fileyear) & CStr(FileIteration)" 实际上将产生 141, 142, 143, 144 用于相关示例。不保留前导零。有点奇怪的行为,但这就是它的工作原理。至少在 Access 2010 中,这是我刚刚用来运行测试的。
      • 这在 SQL 的 MS Access 风格中是不正确的。我在 Access 2007 中确认了它
      • 这真的取决于 FileYear 和 FileIteration 是什么数据类型。由于从问题中不清楚,如果 FileIteration 是文本,这个答案就很好。如果是数字,你会如何输入 0004?
      • @rontornambe 我确实明确指出FileIteration在我的问题中存储为整数..
      猜你喜欢
      • 2023-01-26
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2014-10-02
      相关资源
      最近更新 更多