Как можно найти количество случаев конкретного символа в строке с помощью sql?

То, что вы можете сделать, чтобы избежать многих других утверждений, это создать некоторую абстракцию валидации.

interface Validator<A, B> {
  boolean validate(A receivedObject, B existingObject);
}

Затем для каждого if создайте новую реализацию Validator.

class NameValidator implements Validator<Expeceted, Received> {
  @Override
  public boolean validate(Expeceted receivedObject, Received existingObject) {
    return existingObject.getName().equals(receivedObject.getName());
  }
}   

class LocationValidator implements Validator<Expeceted, Received> {
  @Override
  public boolean validate(Expeceted receivedObject, Received existingObject) {
    return existingObject.getLocation().equals(receivedObject.getLocation());
  }
}

Вы можете создать список таких валидаторов

List<Validator<Expeceted, Received>> validators = Arrays.asList(
  new NameValidator(),
  new LocationValidator()
);

И, наконец, ваш метод сравнения может просто перебрать все валидаторы.

public boolean compareObjects(Received recievedObject, Expeceted expecetedObject) {
  for (Validator<Expeceted, Received> validation : validators) {
    if (! validation.validate(expecetedObject, recievedObject)) {
      return false;
    }
  }
  return true;
}

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

24
задан xsl 13 November 2008 в 16:18
поделиться

2 ответа

Здесь Вы идете:

declare @string varchar(100)
select @string = 'sfdasadhfasjfdlsajflsadsadsdadsa'
SELECT LEN(@string) - LEN(REPLACE(@string, 'd', '')) AS D_Count
56
ответ дан 28 November 2019 в 22:32
поделиться

Если вы хотите сделать его немного более общим, вам следует разделить на длину того, что вы ищете. Например, так:

declare @searchstring varchar(10);
set @searchstring = 'Rob';

select original_string, 
(len(orginal_string) - len(replace(original_string, @searchstring, '')) 
   / len(@searchstring)
from someTable;

Это потому, что каждый раз, когда вы находите "Роб", вы удаляете три символа. Поэтому, когда вы удаляете шесть символов, вы находите "Роба" дважды.

13
ответ дан 28 November 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: