查询表达式返回文本字符串

我真的希望有人能帮助我与此有关。 我有一个字符(这是一个文本字段)的数量而变化的项目数的领域。 我需要的是最后三个字母如CON,TRN,MNT等字母这个字符串就是这个文本字符串一致的嘛......嗯,所以我想。 我发现,其中有1或2加入到该最后三个字母(例如CON1,TRN2,等)的情况。 此外,CON(或其它三个字母结尾)也可以包含在文本字符串,所以我不能只是筛选“CON”的第一部分。 如何我可以得到我的查询只返回我需要的三个字母的任何建议,以便以后可以组呢?

任何帮助将不胜感激。

--------------解决方案-------------

你可以建立一个函数来做到这一点。 尝试是这样的:

功能ProjectNumber(项目为Variant)作为字符串
昏暗计数器为字节
昏暗NumChar为字节
昏暗StartLtstNum为字节
昏暗PrevChar作为字符串
昏暗CurChar作为字符串

如果ISNULL(项目),然后
NumChar = 0
其他
NumChar = LEN(项目)
万一

StartLtstNum = 0
PrevChar =“X”的

如果NumChar> 0。然后
对于计数器= 1到NumChar
CurChar = MID(项目,计数器,1)
如果则IsNumeric(CurChar),而不是则IsNumeric(PrevChar)然后StartLtstNum =计数器
PrevChar = CurChar
下一个

如果StartLtstNum> 1然后
ProjectNumber =右(修剪(MID(项目1,StartLtstNum - 1)),3)
其他
ProjectNumber =右(项目3)
万一
其他
ProjectNumber =“”
万一
结束功能

我没有完全地测试,但我所看到的看起来不错。


彼得(http://access.xps350.com/)

我张贴的IIF()语句不关心你的领域是否有5个字符或500。所以这个问题,这是我一直在努力,因为昨天搞清楚,不在于此。

我可能是错的,因为我没有访问您的数据,但可以在你的领域也有“空间”在结束了吗? 试试这个,看看是否有没有帮助:

IIf(IsNumeric(Right(Trim([ProjectNumber]),1))=True,Left(Right(Trim([ProjectNumber]),4),3),Right(Trim([ProjectNumber]),3))

裁剪功能将删除你的字符串,这样的话,我们实际上是与文本部分工作的开头或结尾发现的任何空间。 我曾与数百记录测试它放在桌上,它并正常工作。 如果这样仍不能正常为你工作,你可以张贴的2或3 ProjectNumbers失败,所以我们可以尝试找出问题的根源样本。

丹尼尔Pineault
http://www.cardaconsultants.com
MS访问技巧和代码示例:http://www.devhut.net

我希望我正确理解的问题,但在使用组合IIF()用则IsNumeric(),你应该能够提取您所需要的。 尝试是这样的:

IIf(IsNumeric(Right([ProjectNumbersFieldName],1))=True,Left(Right([ProjectNumbersFieldName],4),3),Right([ProjectNumbersFieldName],3))

如果这不正是你想要的东西,请详细说明,我会帮你调整代码的要求。

希望它能帮助,

丹尼尔Pineault
http://www.cardaconsultants.com
MS访问技巧和代码示例:http://www.devhut.net

你可以建立一个函数来做到这一点。 尝试是这样的:

功能ProjectNumber(项目为Variant)作为字符串
昏暗计数器为字节
昏暗NumChar为字节
昏暗StartLtstNum为字节
昏暗PrevChar作为字符串
昏暗CurChar作为字符串

如果ISNULL(项目),然后
NumChar = 0
其他
NumChar = LEN(项目)
万一

StartLtstNum = 0
PrevChar =“X”的

如果NumChar> 0。然后
对于计数器= 1到NumChar
CurChar = MID(项目,计数器,1)
如果则IsNumeric(CurChar),而不是则IsNumeric(PrevChar)然后StartLtstNum =计数器
PrevChar = CurChar
下一个

如果StartLtstNum> 1然后
ProjectNumber =右(修剪(MID(项目1,StartLtstNum - 1)),3)
其他
ProjectNumber =右(项目3)
万一
其他
ProjectNumber =“”
万一
结束功能

我没有完全地测试,但我所看到的看起来不错。


彼得(http://access.xps350.com/)

感谢您的回复丹尼尔。 我相信你明白我想说什么。 我一直在两个不同的查询/表测试。 我打开它变成第一个查询它完美地工作。 这是根据我的主项目表。 我印象非常深刻! 但后来我把它放到我会用它来查询,结果无法解释给我。 首先,如果我加比ProjectNumber和您提供的其他表达任何其他领域,我得到了表达领域没有结果。 但如果我删除它,它的回报,但不是对所有项目的三个字母。 我没有看到的模式,为什么。 在少数情况下与第二个查询,它只返回两个字母。 什么可能发生的任何想法?

再次感谢。

这里有两个查询......尽管他们似乎是除了表和我增加了一个字段相同的:

这是从我的主表的:

SELECT tblTestType.ProjectNumber, IIf(IsNumeric(Right([ProjectNumber],1))=True,Left(Right([ProjectNumber],4),3),Right([ProjectNumber],3)) AS型,tblTestType.TypeID_US

FROM tblTestType;

这是从我的数据表中的一项:

SELECT tblTransData.ProjectNumber, IIf(IsNumeric(Right([ProjectNumber],1))=True,Left(Right([ProjectNumber],4),3),Right([ProjectNumber],3)) AS型

FROM tblTransData;

彼得感谢您的回复。 我一直对丹尼尔的答案,但我想试试你的。 我用VBA与形式出现,但从来没有与查询。 如果你不介意我问,在哪里我把这个尝试一下?

再次感谢。

我发现了如何把代码模块中,但我不知道如何将它引用到我的查询。 我可能会得到我的头这一点。 如果它真的复杂,请让我知道,我会保存为新的一天。 但由于反正。

只需添加到我的最后一个职位......我想我知道发生了什么。 有15个字符的项目都还好。 有14个字符的那些拿到2个字母等。 我想这个功能是关闭的工作项目编号的结尾。

你可以参考一个自定义的功能就像一个标准功能。

因此,在查询它看起来像:

SELECT ProjectNumber([YourField])作为项目FROM YourTable


彼得(http://access.xps350.com/)

这是不是在所有复杂。 谢谢你向我展示如何做到这一点。 但我有一个类似的问题,因为与丹尼尔的回答。 如果该项目为15个字符,这是正确的,但如果项目只有14个字符,它只返回两个字符等。 并在较短的项目的情况下,它循环左右,并开始以该项目的开头拾取信。 有什么办法来写代码,以便它只是最后三个字母,exluding而来之后的任何数字。

我感谢您的帮助。

我张贴的IIF()语句不关心你的领域是否有5个字符或500。所以这个问题,这是我一直在努力,因为昨天搞清楚,不在于此。

我可能是错的,因为我没有访问您的数据,但可以在你的领域也有“空间”在结束了吗? 试试这个,看看是否有没有帮助:

IIf(IsNumeric(Right(Trim([ProjectNumber]),1))=True,Left(Right(Trim([ProjectNumber]),4),3),Right(Trim([ProjectNumber]),3))

裁剪功能将删除你的字符串,这样的话,我们实际上是与文本部分工作的开头或结尾发现的任何空间。 我曾与数百记录测试它放在桌上,它并正常工作。 如果这样仍不能正常为你工作,你可以张贴的2或3 ProjectNumbers失败,所以我们可以尝试找出问题的根源样本。

丹尼尔Pineault
http://www.cardaconsultants.com
MS访问技巧和代码示例:http://www.devhut.net

也正因为这个功能它doen't您的字符串是不管多久。

一定有什么用最后一个位置(S)。 你能后发生故障的字符串的值?

或者,也许你可以找到使用上次位置:升序(右([YourField]; 1))。


彼得(http://access.xps350.com/)

分类:办公室 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.512 (s). 10 q(s)