3

我在查询中有以下列。

iif(Len([Field1])=0,0,Asc(Mid([Field1] & "",Len([Field1]))))

这个想法是它应该返回字符串字段中最后一个字符的 ASCII 值。问题是,如果 Field1 为空,则语句错误并显示以下消息:“无效的过程调用或参数(错误 5)”。如果该字段为空,则应返回 0。

4

2 回答 2

5

假设空白表示 Null 或空字符串,您可以将空字符串连接到[Field1],如果组合长度为 0,则返回 0。

Right()函数比Mid()获取最后一个字符更直接。

SELECT IIf(Len([Field1] & "")=0,0,Asc(Right([Field1],1)))
FROM YourTable;
于 2012-12-26T20:24:12.503 回答
2

无论如何,你有 HansUp 的答案继续前进。:)

..在此查询航程的任何时候,您的查询IIF都会变得非常长... ;) 这里以UDfunction使用REGEX. 在您的情况下,最重要的方面是验证输入 - 获得ASCII价值并不多。由于您主要关心最后一个character,如果您的 Field1 包含alphanumeric值并且您的最后一个字符恰好是digitspecial character而不是String. 好吧,为了安全起见,我们可以在以下Strings响应. 另一个优点是你可以在你的数据库中重复使用这个函数。

也许这确实使您的过程复杂化:D

Option Compare Database
Option Explicit 

 Public Function GetASCII(strField1 As String) As Integer 
    Dim regex As Object
    Dim strTemp As String

    Set regex = CreateObject("vbscript.regexp")

    '--assume strField1 = "hola", you may enter different types 
    '-- of values to test e.g. "hola1, hola$ , hola;

    With regex
        .IgnoreCase = True
        .Global = True
        .Pattern = "[a-zA-Z]+"

        '--check for null
        Select Case IsNull(strField1) '-- validates any other datatype than String
            Case True
                GetASCII = 0
            Case Else
                Select Case IsError(strField1)
                   Case True
                      GetASCII = 0
                   Case Else
                      Select Case IsEmpty(strField1)
                          Case True
                             GetASCII = 0
                             '--check if entire string is String 
                             '--only (no special characters, digits)
                             '--you may change this to only check the 
                             '----last character if your Field1 is alphanumeric
                          Case Else
                             Select Case .Test(strField1)
                                 Case True
                                    strTemp = Mid(strField1, Len(strField1), 1)
                                    GetASCII = Asc(strTemp)
                                 Case Else
                                    GetASCII = 0
                             End Select
                      End Select        
                End Select        
        End Select        
    End With            
    Set regex = Nothing
 End Function

注意:认为这从长远来看会有所帮助 :)访问查询入门文章

于 2012-12-26T21:58:45.563 回答