Как найти значения во всех шапках в SQL Server?

18

Как найти значения столбцов во всех кепках? Как LastName = 'SMITH' вместо 'Smith'

Вот что я пытался ...

SELECT *
  FROM MyTable
 WHERE FirstName = UPPER(FirstName)
    
задан daveomcd 17.11.2011 в 16:31
источник
  • Это должно сработать. Какой результат вы получили? –  Polynomial 17.11.2011 в 16:33
  • @Polynomial, я просто получаю такие же результаты, как если бы я запускал «WHERE FirstName = FirstName» ... возможно, кодировка должна быть другой (если это имеет смысл ... idk, о чем они говорят точно) –  daveomcd 17.11.2011 в 16:36

9 ответов

38

Вы можете принудительно сортировать регистр,

select * from T
  where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
    
ответ дан Alex K. 17.11.2011 в 16:37
источник
5

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) Импортируйте все свои данные.

    
ответ дан Joe Ratzer 17.11.2011 в 16:39
источник
1

По умолчанию SQL-сравнения не зависят от регистра.

    
ответ дан drdwilcox 17.11.2011 в 16:36
источник
1

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

SELECT * 
FROM MyTable
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS
    
ответ дан Anja 17.11.2011 в 16:38
источник
0

Не могли бы вы использовать это как предложение where?

WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
    
ответ дан Nonym 17.11.2011 в 16:37
источник
0

Посмотрите здесь

Кажется, у вас есть несколько вариантов

  • введите строку в VARBINARY (длина)

  • используйте COLLATE для указания сортировки с учетом регистра

  • вычислить BINARY_CHECKSUM () строк для сравнения

  • изменить свойство COLLATION столбца таблицы

  • использовать вычисленные столбцы (неявный расчет VARBINARY)

ответ дан Richard Friend 17.11.2011 в 16:37
источник
0

Попробуйте это

SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS
    
ответ дан Sequenzia 17.11.2011 в 16:40
источник
0
ответ дан hkravitz 25.11.2013 в 15:49
источник
0

Я создал простой 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
    
ответ дан isapir 25.02.2015 в 05:45
источник