Горячо сравнивать строковое значение слева направо

Как сравнить строковое значение слева направо

Table1 (Column name: Reference)

A123BD
E-.D256
123-D14:

У меня есть ссылочный номер в таблице 1, я хочу сравнить, совпадает ли ссылочный номер таблицы 1 с пользовательским вводом слева направо. пример Пользователь может ввести как A123BD398202, тогда он должен сравниться со столбцом table1, здесь слева направо значение пользовательского ввода соответствует столбцу таблицы 1 A123BD

user input

A123BD124
E-.D257809
A123-D14:2345

' для приведенного выше пользовательского ввода ожидается вывод

Matching (left to right string of table1 column is matching with user input)
Not Matching (left to right string of table1 column is not matching with user input)
Not matching (left to right string of table1 column is not matching with user input)

Также строка не имеет фиксированной длины, пользовательский ввод сравнивает строку столбца таблицы 1 слева направо.

Как добиться этого в SQL-запросе. Может кто-нибудь помочь мне


person Gopal    schedule 07.08.2016    source источник
comment
Вы можете использовать ui like reference + '%' или left(ui, len(reference)) = reference или charindex(reference, ui) = 1   -  person shawnt00    schedule 07.08.2016


Ответы (2)


Простой like может сработать для вас. См. следующий пример.

declare @refs table(reference varchar(50))
insert @refs values
('A123BD'),
('E-.D256'),
('123-D14:')

declare @userInput table (ui varchar(50))
insert @userInput values
('A123BD124'),
('E-.D257809'),
('A123-D14:2345')

select ui,
   case when exists(select 1 from @refs where ui like reference+'%') then 'match'
   else 'not match' end isMatch
from @userInput

Выход:

ui               isMatch
A123BD124        match
E-.D257809       not match
A123-D14:2345    not match
person Alex Kudryashev    schedule 07.08.2016

похоже, что вы хотите, когда одна строка находится в другой, но не наоборот. Вы можете проверить длину столбца и проверить левые X символов ввода. см. пример ниже в tsql.

  declare @input varchar(50) = 'A123-D14:2345'

/*
A123BD124
E-.D257809
A123-D14:2345
*/

if object_id('tempdb.dbo.#table1') is not null drop table #table1
create table #table1 (Column1 varchar(50))


Insert into #table1 (Column1)
Values('A123BD')
        ,('E-.D256')
        ,( '123-D14:')

Select 
    Column1
    ,Left(Column1, Len(Column1))
    ,@input
    ,Len(column1)
    ,Len(@input)
    ,Case when Left(@input, Len(Column1)) = Column1 then 'Matched'
        Else 'unmatched'
        END as [IsMatched]
from
#table1
person Sean    schedule 07.08.2016