Как сделать сравнение с учетом регистра в SQL? - PullRequest
3 голосов
/ 30 июля 2009

Только что начал учебник по SQL для начинающих. Сейчас я делаю упражнения и хотел бы узнать, как изменить название.

Если вы посмотрите здесь: вы увидите, что я сделал имя, фамилию, должность, возраст и зарплату. И я написал письма маленьким письмом. Как я могу изменить его на заглавную букву?

http://tinypic.com/r/amtpgm/3

Я пытался использовать это:

update mytablename 
set firstname = 'Firstname'
where firstname = 'firstname'

Но позже я понял, что этот не будет работать.

Спасибо

====

дополнительный вопрос:

Я также заметил, что если я написал пробелами, то он не распознается. Это только первая часть, которая будет отображаться. Вы знаете, почему это происходит? Спасибо

create table myemployees_tr0214
(First Name varchar(20),
Last Name varchar(20),
Title char(5),
Age number(3),
Salary number(6,10));

==========

спасибо за ваш вклад. Я пытался переименовать «Имя» в «Fname», и это не сработало. Я что-то пропустил?

alter table myemployees_tr0214
rename column Firstname to Fname;

Ответы [ 8 ]

3 голосов
/ 30 июля 2009

Это должно обновить все имена в таблице до заглавной первой буквы:

UPDATE mytablename SET firstname = CONCAT(UCASE(MID(firstname,1,1)),MID(firstname,2));

Надеюсь, это поможет вам:)

2 голосов
/ 30 июля 2009

Во-первых, если вы действительно не хотите изменить имена полей, не делайте этого. Это не так уж важно, если все, что вы делаете, - это изучение SQL. Обратите внимание, что если вы хотите изучить синтаксис для этого, то, конечно, это было бы полезным упражнением, но в остальном я позволил бы ему.

Ваш отредактированный вопрос упоминает использование пробелов в именах. Это не разрешено Правила для того, что составляет «Идентификатор SQL», будь то имя таблицы, столбца, ограничения и т. Д., Имеют некоторые строгие правила, и они упрощены тем, что вы должны использовать только буквы, подчеркивания и цифры, за исключением того, что вы можете не начинайте с цифры.

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

Чтобы исправить это, либо добавьте подчеркивание вместо пробелов, либо заключите контракт и используйте camelCasing, например: FirstName, LastName

1 голос
/ 30 июля 2009

Ах, есть два способа прочитать этот вопрос. Первый основан на прочтении образца ОБНОВЛЕНИЯ, которое вы опубликовали. Это не удастся, потому что SQL по умолчанию не выполняет сравнение строк с учетом регистра.

Второй фрагмент кода подразумевает, что вы хотели изменить ALTER TABLE и изменить имя столбца с имени столбца с одним регистром на другой. В MS-SQL вы не можете сделать это без удаления всей таблицы и ее повторного создания, в других диалектах SQL будет использоваться синтаксис DDL для конкретной версии.

И, наконец, в MS-Access, если в имени столбца есть пробел, вы заключаете его в двойные кавычки, например, «My Column» в SQL обернуть его в [My Column]

1 голос
/ 30 июля 2009

Если вы используете mysql см: http://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html

Оператор BINARY приводит строку после этого в двоичную строку. это это простой способ провести сравнение должно быть сделано побайтно, а не символ за символом. Двоичный также заставляет завершающие пробелы быть значительный

mysql> SELECT 'a' = 'A';
        -> 1
mysql> SELECT BINARY 'a' = 'A';
        -> 0
mysql> SELECT 'a' = 'a ';
        -> 1
mysql> SELECT BINARY 'a' = 'a ';
        -> 0
1 голос
/ 30 июля 2009

Для MS SQL Server ...

Вы бы использовали [и] для разделения идентификаторов:

create table myemployees_tr0214 (
  [First Name] varchar(20),  --here
  [Last Name] varchar(20),  --here
  Title char(5),
  Age number(3),
  Salary number(6,10)
);

Если вы хотите изменить имя столбца с «имя» на «Имя», вы можете использовать sp_rename в MS SQL Server.

Если вы хотите изменить первую букву данных в столбце «имя», другие авторы предложили решения, а вот еще одно для одного имени.

update mytablename 
set firstname = 'Firstname'
where firstname COLLATE Latin1_general_Bin = 'firstname' COLLATE Latin1_general_Bin
1 голос
/ 30 июля 2009
update mytablename set firstname = 'Firstname'; where firstname = 'firstname';

Это обновит значения столбца имени. То, что вы пытаетесь сделать, это изменить имя столбца имени. Как это сделать, зависит от базы данных, которую вы используете (которую вы не упомянули).

Если это MS Access или SQL-сервер, вы можете открыть таблицу в пользовательском интерфейсе и использовать конструктор для изменения имени столбца.

В противном случае вы можете использовать оператор SQL ALTER TABLE, как описано здесь .

0 голосов
/ 30 июля 2009

Это может потребоваться оптимизировать для большего, но позволит вам даже обновить несколько имен MSSQL версии

select 'mary ellen' as firstname into #test
insert into #test select 'Nathan'


select 
Case when patindex('% %',firstname) >0 then
upper(left(firstname,1)) --first letter
+ rtrim(substring(firstname,2,patindex('% %',firstname)-1)) --whole firstname
+ ' ' -- space
+ Upper(substring(firstname,patindex('% %',firstname)+1,1)) --first letter last name
+  rtrim(substring(firstname,patindex('% %',firstname)+2, len(firstname)))
else
upper(left(firstname,1)) + substring(firstname,2,len(firstname))
end as firstname
from #test


update #test
set firstname = Case when patindex('% %',firstname) >0 then
upper(left(firstname,1)) --first letter
+ rtrim(substring(firstname,2,patindex('% %',firstname)-1)) --whole firstname
+ ' ' -- space
+ Upper(substring(firstname,patindex('% %',firstname)+1,1)) --first letter last name
+  rtrim(substring(firstname,patindex('% %',firstname)+2, len(firstname)))
else
upper(left(firstname,1)) + substring(firstname,2,len(firstname))
end 
0 голосов
/ 30 июля 2009

вам понадобится какой-то уникальный идентификатор строки, такой как id, чтобы вы могли сделать

update mytablename set firstname = 'Firstname' where id = 1

Теперь то, что можно использовать в качестве уникального идентификатора строки, - это спор о натуральных против суррогатных ключах. используйте то, что вы считаете лучшим для своего примера, но я сторонник суррогатных ключей, поскольку каждый естественный ключ имеет возможность измениться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...