首页 > 解决方案 > SQL - 我有两个日期字符串,即返回 len(9)、m/dd/yyyy 和 mm/d/yyyy。什么有助于选择格式?

问题描述

这有点难以填补背景故事。我使用的软件只能识别 mm/yyyy 或 m/yyyy 格式的固定日期,但它可以从 MS Access 的表格中读取链接日期。在程序中,您可以选择将 Access 链接日期转换为存储在软件中的固定日期。当它转换为固定值时,它可以以多种变化形式写入日期,但给我带来麻烦的是,当它以“m/dd/yyyy”或“mm/d/yyyy”这两种格式中的任何一种格式写入时这些返回的长度为 9。下面的代码是我如何处理长度为 6、7、8 或 10 的其他格式。我只注意到 len 9 的错误,因为我终于遇到了将日期写为“m”的情况/dd/yyyy”,它导致软件错误,因为我的查询将日期“更正”为“m//yyyy” 格式。我无法控制它如何写日期。软件公司知道这个问题,并在下一次更新中解决它,但我不知道什么时候会推出,所以在那之前我需要一个解决方法。

使用下面的方法将返回“m//yyyy”或“mm/yyyy”。如何让它选择处理“m/dd/yyyy”格式以输出“m/yyyy”而不是两个反斜杠?这不是我的代码,这里有人在回答之前的问题时写了它。我对任何编程语言都不是很胜任,但我对函数有基本的了解。

IIf(Len([Expression])=6,"0" & [Expression],
IIf(Len([Expression])=7,[Expression],
IIf(Len([expression])=8,Left([Expression],1) & "/" & Right([expression],4),
IIf(Len([expression])=9,Left([Expression],2) & "/" & Right([expression],4),
IIf(Len([expression])=10,Left([Expression],2) & "/" & Right([expression],4))))))

我的猜测是包含一个嵌套的 AND 函数或类似的东西,但我不知道如何让它正常工作,然后我必须做一些像 IfElse 语句来处理“mm/d/yyyy”格式. 我确信有一种更有效的方法可以找到解决方案,我会感谢那些真正知道他们在做什么的人的帮助,而不是让我在下个月摸索它并将我的头撞到我的桌子上。

If Len[Expression]=9 AND Left[Expression],2 = "/", Left([Expression],1) & "/" & Right([Expression],4) Else Left([Expression],2) & "/" & Right([Expression],4)

标签: sqlms-access

解决方案


尝试为 9 个字符长的项目添加替换功能:

IIf(Len([expression])=9,Replace(Left([Expression],2) & "/" & Right([expression],4), "//","/"),

推荐阅读