У меня тут возникла необходимость сделать поиск строки с использованием Like в БД MS SQL Server. Ну и, так вышло, что юзверь (он ж клиент) запотребовал чтоб строка была в стиле VB то есть:
Vb Like:
* = от 0 до <ВЦ> любых знаков.
? = один любой знак
# = один знак {0,1,2,3,4,5,6,7,8,9}
...
SQL Like:
% = от 0 до <ВЦ> любых знаков.
_ = один любой знак
...
Ну так вот, я навскидку накалякал конвертер:
- Код: Выделить всё
Private Function LikeVB2SQL(sVBlike As String) As String
Dim sTMP As String, blnInBracket As Boolean, s2Chars As String
sTMP = "" 'чиста для подстраховки! ;-)
blnInBracket = False ' иии... та ж фигня (мало ли что)! ;-)
Do While Len(sVBlike)
If blnInBracket Then
If Left(sVBlike, 1) = "]" Then blnInBracket = False
sTMP = sTMP & Left(sVBlike, 1)
Else
Select Case Left(sVBlike, 1)
Case "["
If Left(sVBlike, 2) = "[!" Then
If Left(sVBlike, 3) <> "[!]" Or InStr(sVBlike, "]") <> 0 Then
sTMP = sTMP & "[^"
sVBlike = Right(sVBlike, Len(sVBlike) - 1)
End If
ElseIf Left(sVBlike, 2) = "[^" Then
If Left(sVBlike, 3) <> "[^]" Or InStr(sVBlike, "]") <> 0 Then
sTMP = sTMP & "[_^"
sVBlike = Right(sVBlike, Len(sVBlike) - 1)
End If
Else
sTMP = sTMP & Left(sVBlike, 1)
End If
If InStr(sVBlike, "]") Then blnInBracket = True
Case "*"
sTMP = sTMP & "%"
Case "?"
sTMP = sTMP & "_"
Case "#"
sTMP = sTMP & "[01923456789]"
Case "%"
sTMP = sTMP & "[%]"
Case "_"
sTMP = sTMP & "[_]"
Case Else
sTMP = sTMP & Left(sVBlike, 1)
End Select
End If
sVBlike = Right(sVBlike, Len(sVBlike) - 1)
Loop
LikeVB2SQL = sTMP
End Function
А нигде нет уже готового?
Ато, например как like обрабатывает такие конструкции как "*[![]]" или например "!#[![1]]#". ВоОоПщем юзверь вааще про феньки типа "##[a-g]*" не осведомлён, евстевственно -- НО ВДРУГ! ;-)
------------------------------------------------
Заранее благодарен!
PS: <ВЦ> = вырезанно цензурой