Как я выполняю поиск с учетом регистра и замену в SQL 2000/2005?

Учитывая ES6, я хотел бы добавить свою собственную ложку сахара и предложить еще один подход к итерации по свойствам объекта.

Поскольку простой объект JS не является iterable просто вне поля, мы не можем использовать цикл for..of для итерации по его контенту. Но никто не может остановить нас, чтобы сделать его итерируемым.

Давайте будем иметь book объект.

let book = {
  title: "Amazing book",
  author: "Me",
  pages: 3
}

book[Symbol.iterator] = function(){

  let properties = Object.keys(this); // returns an array with property names
  let counter = 0;
  let isDone = false;

  let next = () => {
    if(counter >= properties.length){
      isDone = true;
    }
    return { done: isDone, value: this[properties[counter++]] }
  }

  return { next };
}

Поскольку мы сделали это, мы можем использовать его следующим образом:

for(let pValue of book){
  console.log(pValue);
}
------------------------
Amazing book
Me
3

Или, если вы знаете мощность генераторов ES6 , вы наверняка можете сделать код намного короче.

book[Symbol.iterator] = function *(){

  let properties = Object.keys(this);
  for (let p of properties){
    yield this[p];
  }

}

Конечно, вы может применять такое поведение для всех объектов, делая Object итерабельным на уровне prototype.

Object.prototype[Symbol.iterator] = function() {...}

Кроме того, объекты, которые соответствуют итерабельному протоколу, могут использоваться с новой функцией ES2015 spread , поэтому мы можем считывать значения свойств объекта в виде массива.

let pValues = [...book];
console.log(pValues);
-------------------------
["Amazing book", "Me", 3]

Или вы можете использовать назначение destructuring :

let [title, , pages] = book; // notice that we can just skip unnecessary values
console.log(title);
console.log(pages);
------------------
Amazing book
3

Вы можете проверить JSFiddle со всеми приведенными выше мной кодами.

9
задан marc_s 28 November 2015 в 15:44
поделиться

5 ответов

SELECT testColumn FROM testTable  
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'example' 

SELECT testColumn FROM testTable
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'EXAMPLE' 

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 

Не предполагайте, что сопоставление по умолчанию будет чувствительно к регистру, просто укажет чувствительное к регистру каждый раз (использующий корректное для Вашего языка, конечно)

13
ответ дан 4 December 2019 в 08:17
поделиться

Определите, чувствительно ли сопоставление по умолчанию к регистру как это:

select charindex('RESULT', 'If the result is 0 you are in a case-sensitive collation mode')

Результат 0 указывает, что Вы находитесь в чувствительном к регистру режиме сопоставления, 8 указывает, что это нечувствительно к регистру.

Если сопоставление нечувствительно к регистру, необходимо явно объявить режим сопоставления, который Вы хотите использовать при выполнении поиска/замены.

Вот то, как создать оператор UPDATE для выполнения чувствительного к регистру поиска/замены путем определения режима сопоставления для использования:

update ContentTable
set ContentValue = replace(ContentValue COLLATE Latin1_General_BIN, 'THECONTENT', 'TheContent')
from StringResource
where charindex('THECONTENT', ContentValue COLLATE Latin1_General_BIN) > 0

Это будет соответствовать и заменять 'THECONTENT', но нет 'TheContent' или 'thecontent'.

9
ответ дан 4 December 2019 в 08:17
поделиться

В первую очередь, проверьте это: http://technet.microsoft.com/en-us/library/ms180175 (SQL.90) .aspx

Вы будете видеть, что CI указывает нечувствительный к регистру, и CS указывает чувствительный к регистру.

0
ответ дан 4 December 2019 в 08:17
поделиться

Кроме того, это могло бы быть полезно. выберите * из fn_helpcollations () - это получает все сопоставления Ваши поддержки сервера. выберите * из sys.databases - здесь существует столбец, который указывает, какое сопоставление имеет каждую базу данных по Вашему серверу.

0
ответ дан 4 December 2019 в 08:17
поделиться

Можно или указать сопоставление каждый раз, когда Вы запрашиваете таблицу, или можно применить сопоставление к столбцу (столбцам) постоянно путем изменения таблицы.

Если Вы действительно принимаете решение сделать метод запроса его выгодное для включения аргументов поиска без учета регистра также. Вы будете видеть, что SQL выберет более эффективный исполнительный план при включении их. Например:

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 
    and testColumn = 'eXaMpLe'
0
ответ дан 4 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

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