Как найти значения столбцов во всех кепках? Как LastName = 'SMITH'
вместо 'Smith'
Вот что я пытался...
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName)
Как найти значения столбцов во всех кепках? Как LastName = 'SMITH'
вместо 'Smith'
Вот что я пытался...
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName)
Вы можете принудительно сортировать регистр,
select * from T
where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
Try
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS
Эта сортировка позволяет проводить проверки, чувствительные к регистру.
Если вы хотите изменить настройку своей базы данных, поэтому вам не нужно указывать учетную запись в ваших запросах, вам нужно сделать следующее (из MSDN):
1) Убедитесь, что у вас есть вся информация или сценарии, необходимые для воссоздания ваших пользовательских баз данных и всех объектов в них.
2) Экспортируйте все свои данные с помощью такого инструмента, как утилита bcp.
3) Отбросьте все пользовательские базы данных.
4) Перестройте основную базу данных, указав новую сортировку в свойстве SQLCOLLATION команды setup. Например:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
/SQLCOLLATION=CollationName
5) Создайте все базы данных и все объекты в них.
6) Импортируйте все свои данные.
По умолчанию SQL-сравнения не зависят от регистра.
Вам нужно использовать сортировку сервера, которая чувствительна к регистру так:
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS
Не могли бы вы использовать это как предложение where?
WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
Посмотрите здесь
Кажется, у вас есть несколько вариантов
введите строку в VARBINARY (длина)
используйте COLLATE для указания сортировки с учетом регистра
вычислить BINARY_CHECKSUM() строк для сравнения
изменить столбцы таблицы Свойство COLLATION
использовать вычисленные столбцы (неявный расчет VARBINARY)
Попробуйте это
SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS
Вы можете найти хороший пример в Case Sensitive Search: выборка строчной или строчной строки на SQL Server
Я создал простой UDF
для этого:
create function dbo.fnIsStringAllUppercase(@input nvarchar(max)) returns bit
as
begin
if (ISNUMERIC(@input) = 0 AND RTRIM(LTRIM(@input)) > '' AND @input = UPPER(@input COLLATE Latin1_General_CS_AS))
return 1;
return 0;
end
Затем вы можете легко использовать его в любом столбце в разделе WHERE
.
Чтобы использовать пример OP:
SELECT *
FROM MyTable
WHERE dbo.fnIsStringAllUppercase(FirstName) = 1