Я нахожусь в процессе записи некоторого кода в проект с открытым исходным кодом, названный thrift-protobuf-compare, выдерживающим сравнение между protobuf и экономией. На данный момент это покрывает немного аспектов сериализации, но я намереваюсь покрыть больше. Результаты (для Экономия и Protobuf) обсуждены в моем блоге, я добавлю больше, когда я доберусь до него. Можно посмотреть на код для сравнения API, языка описания и сгенерированного кода. Я буду рад иметь вклады для достижения более округленного сравнения.
Вам нужно выражение, которое возвращает «Fall_2009» или «Spring_2009», а затем сгруппируйте его по этому выражению. например:
-- identify each pattern individually w/ a case statement
SELECT
CASE
WHEN column_x LIKE '%Fall[_]2009' THEN 'Fall 2009'
WHEN column_x LIKE '%Spring[_]2009' THEN 'Spring 2009'
END AS group_by_value
, COUNT(*) AS group_by_count
FROM Table1 a
GROUP BY
CASE
WHEN column_x LIKE '%Fall[_]2009' THEN 'Fall 2009'
WHEN column_x LIKE '%Spring[_]2009' THEN 'Spring 2009'
END
или
-- strip all characters up to the first space or dash
SELECT
STUFF(column_x,1,PATINDEX('%[- ]%',column_x),'') AS group_by_value
, COUNT(*) as group_by_count
FROM Table1 a
GROUP BY
STUFF(column_x,1,PATINDEX('%[- ]%',column_x),'')
или
-- join to a (pseudo) table of pattern masks
SELECT b.Label, COUNT(*)
FROM Table1 a
JOIN (
SELECT '%Fall[_]2009' , 'Fall, 2009' UNION ALL
SELECT '%Spring[_]2009', 'Spring, 2009'
) b (Mask, Label) ON a.column_x LIKE b.Mask
GROUP BY b.Label
Нет, функция LIKE не поддерживается в предложении GROUP BY
. Вам нужно будет использовать:
SELECT x.term,
COUNT(*)
FROM (SELECT CASE
WHEN CHARINDEX('Fall_2009', t.column) > 0 THEN
SUBSTRING(t.column, CHARINDEX('Fall_2009', t.column), LEN(t.column))
WHEN CHARINDEX('Spring_2009', t.column) > 0 THEN
SUBSTRING(t.column, CHARINDEX('Spring_2009', t.column), LEN(t.column))
ELSE
NULL
END as TERM
FROM TABLE t) x
GROUP BY x.term
LIKE не имеет смысла в вашем контексте, поскольку он либо совпадает, либо нет, но он не создает группы. Вам придется использовать строковые функции, которые анализируют значения столбцов в соответствии с вашими данными.
Я так не думаю, ПОДОБНО - это фактически двоичное состояние - что-то похоже или НЕ похоже, нет логических степеней «подобия», которые можно было бы сгруппировать вместе. С другой стороны, я мог бы быть не в своей тарелке.
Если вы действительно хотите выразить фильтрацию ваших сгруппированных данных, взгляните на предложение HAVING.
Вы можете сделать это таким образом, но, как говорили другие, на самом деле это не имеет смысла:
SELECT COUNT(*)
FROM tblWhatever
GROUP BY column_x
HAVING column_x LIKE '%Fall-2009%'
К сожалению, у вас плохо структурированная база данных, в которой SUBJECT и TERM объединены в один столбец. Когда вы используете GROUP BY, он обрабатывает каждое уникальное значение в столбце как группу в наборе результатов. Лучше всего порекомендовать вам реструктурировать базу данных, если это вообще возможно - вы, вероятно, захотите здесь три столбца (SUBJECT, TERM, SCHOOL_YEAR), но два, возможно, подойдут.
Если вы не можете реструктурировать базу данных, вам понадобятся для анализа столбца и извлечения термина. Rexem показал вам один способ сделать это, вы также можете использовать хранимую процедуру.
Создание уникальной соли для каждого пароля - это нормально. Соль может быть продуктом существующего материала (например, UserID и др.) Или генерироваться случайным образом. Преимущество состоит в том, что атака на зашифрованную информацию становится все непрактичной по мере того, как растет сила соли.
Помните: любой криптографический алгоритм взломан. Информация может считаться «безопасной» только в том случае, если взлом защиты (с помощью радужной таблицы или иным образом) дороже, чем ее ценность.
редактировать:
Предполагая, что вы новичок в криптографии, вот еще несколько советы: