我在查询中有以下列。
iif(Len([Field1])=0,0,Asc(Mid([Field1] & "",Len([Field1]))))
这个想法是它应该返回字符串字段中最后一个字符的 ASCII 值。问题是,如果 Field1 为空,则语句错误并显示以下消息:“无效的过程调用或参数(错误 5)”。如果该字段为空,则应返回 0。
我在查询中有以下列。
iif(Len([Field1])=0,0,Asc(Mid([Field1] & "",Len([Field1]))))
这个想法是它应该返回字符串字段中最后一个字符的 ASCII 值。问题是,如果 Field1 为空,则语句错误并显示以下消息:“无效的过程调用或参数(错误 5)”。如果该字段为空,则应返回 0。
假设空白表示 Null 或空字符串,您可以将空字符串连接到[Field1]
,如果组合长度为 0,则返回 0。
该Right()
函数比Mid()
获取最后一个字符更直接。
SELECT IIf(Len([Field1] & "")=0,0,Asc(Right([Field1],1)))
FROM YourTable;
无论如何,你有 HansUp 的答案继续前进。:)
..在此查询航程的任何时候,您的查询IIF
都会变得非常长... ;) 这里以UDfunction
使用REGEX
. 在您的情况下,最重要的方面是验证输入 - 获得ASCII
价值并不多。由于您主要关心最后一个character
,如果您的 Field1 包含alphanumeric
值并且您的最后一个字符恰好是digit
,special 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
注意:认为这从长远来看会有所帮助 :)访问查询入门文章。