Этот запрос удовлетворяет всем требованиям.
select *
from #strings
where
-- s2 contains s1 as the prefix.
-- The addition of '.' is because sql considers ('abc' = 'abc ')
LEFT(s2,Len(s1))+'.' = s1+'.'
-- next 4 chars are space-dash-space-digit
AND SUBSTRING(s2, Len(s1)+1, Len(s2)) LIKE ' - %[0-9]%'
-- no non-digit letters after that
AND NOT STUFF(s2, 1, len(s1)+4, '') LIKE '%[^0-9]%'
AND s1 > '' -- reject empty string1, added just in case
Вот таблица тестов, показывающая вам все тесты
create table #strings (s1 varchar(100), s2 varchar(100))
insert into #strings values
('ABCD DFHG KLJKL', 'ABCD DFHG KLJKL - abc'), -- no, not number
('ABCD DFHG KLJKL', 'ABCD DFHG KLJKL - 123'), -- yes
('ABCD ', 'ABCD - 123'), -- no, 2nd string is first + '-' without space
('ABCD DFHG KLJKL - 123', 'ABCD DFHG KLJKL'), -- no, reversed
('KLJKL', 'KLJKL - 1.234'), -- ?? no, 2nd string is not digits only
('KL%', 'KLJKL - 1.234'), -- ?? no, 2nd string is not digits only
('', ' - 5234'), -- ?? no, blank string is not a match
(null, ' - 1234'), -- ?? no, null is not equal to blank, which is not a match anyway
('ABCD DFHG KLJKL', null) -- no, of course not