Преобразование правого оператора Like из VB в SQL!

Все вопросы «а не подскажете, где мне найти...» обсуждаются только здесь.
TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Преобразование правого оператора Like из VB в SQL!

Сообщение TEH3OP » 22.12.2003 (Пн) 21:46

Привет всем!
У меня тут возникла необходимость сделать поиск строки с использованием 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: <ВЦ> = вырезанно цензурой

Вернуться в Народный поиск

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

    TopList