我有一个从另一个表中绘制的唯一名称列表。
我想知道我是否可以同时使用相同的SQL查询将输出从这些不同的值中删除特殊字符到另一列?
这是因为我随后必须使用这些名称作为表名,其中一些名称有问题,例如太长或包含特殊字符。
我有一个Function()
,它返回vba代码中的过滤字符串,但不确定如何将其合并到SQL查询中。
这是我现在使用的查询:
SQL = "INSERT INTO [ClientNameList] (ClientName) SELECT DISTINCT TempName.[ClientName] FROM TempName"
输出:
Table Name: ClientNameList
ID ClientName TableName
1 Cat. Cat
2 Dog! Dog
3 MooMoo? MooMoo
答案 0 :(得分:0)
您可以使用/修改此功能:
' Returns a cleaned and truncated string suitable as a code module name.
'
' 2017-03-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function TrimModuleCodeName( _
ByVal Name As String) _
As String
CleanModuleCodeName Name
TrimModuleCodeName = Name
End Function
使用此功能:
' Replaces characters in CodeName that are not allowed in a module codename.
' Truncates length of CodeName to MaxModuleCodeNameLength.
' Returns the cleaned name by reference.
'
' 2017-03-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Sub CleanModuleCodeName(ByRef CodeName As String)
' Maximum length of a module codename in Excel.
Const MaxModuleCodeNameLength As Long = 31
' String containing all not allowed characters.
Const InvalidCharacters As String = "\/,;.:*?'`""<>|()[]{} @#$%&=+-~^"
' String containing all not allowed leading characters.
Const InvalidLeadCharacters As String = "_0123456789"
' Character to replace not allowed characters.
Const ReplaceCharacter As String * 1 = "_"
' Character to replace not allowed characters.
Const ReplaceLeadCharacter As String * 1 = "M"
Dim Length As Integer
Dim Position As Integer
Dim Character As String
Dim TrimmedCodeName As String
' Strip doubled spaces.
While InStr(CodeName, Space(2)) > 0
CodeName = Replace(CodeName, Space(2), Space(1))
Wend
' Strip leading and trailing spaces and limit length of codename.
TrimmedCodeName = Left(Trim(CodeName), MaxModuleCodeNameLength)
Length = Len(TrimmedCodeName)
' Replace invalid characters.
For Position = 1 To Length Step 1
Character = Mid(TrimmedCodeName, Position, 1)
If InStr(InvalidCharacters, Character) > 0 Then
Mid(TrimmedCodeName, Position) = ReplaceCharacter
End If
Next
' Replace a leading invalid character:
Character = Left(TrimmedCodeName, 1)
If InStr(InvalidLeadCharacters, Character) > 0 Then
Mid(TrimmedCodeName, 1) = ReplaceLeadCharacter
End If
' Return cleaned code name.
CodeName = TrimmedCodeName
End Sub
然后:
SQL = "INSERT INTO [ClientNameList] (ClientName) SELECT DISTINCT TrimModuleCodeName(TempName.[ClientName]) FROM TempName"