如何在sql中进行区分大小写的比较?

时间:2009-07-30 12:09:44

标签: sql syntax

刚刚为初学者启动了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 个答案:

答案 0 :(得分:3)

这应该将表中的所有firstnames更新为大写的第一个字母:

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

希望这可以帮助你:)

答案 1 :(得分:2)

首先,除非确实想要更改字段的名称,否则不要。如果你所做的只是学习SQL,那真的不是那么重要。请注意,如果你想学习这样做的语法,那么当然这将是一个值得的练习,但除此之外,我会让它成为。

您编辑的问题提及在名称中使用空格。这是不允许的。什么构成“SQL标识符”的规则,无论是表,列,约束等的名称都有一些严格的规则,简化它们是你应该只使用字母,下划线和数字,除了你可以从一个数字开始。

现在,为什么你用来学习SQL的在线网站在你添加这些空间时并没有抱怨,我不知道,而且对我来说这让人有点怀疑。听起来好像它实际上使用的是已知的数据库引擎,因为那里只有那些空格的存在+额外的单词会使任何普通的数据库引擎抱怨语法错误。

为了修复它,要么添加下划线而不是空格,要么合同并使用camelCasing,如下所示:FirstName,LastName

答案 2 :(得分:1)

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

这将更新firstname列的。您要做的是更改firstname列的名称。如何执行此操作取决于您正在使用的数据库(您尚未提及)。

如果是MS Access或SQL Server,您可以在UI中打开表并使用设计器更改列名。

否则,您可以使用SQL ALTER TABLE语句,如here所述。

答案 3 :(得分:1)

对于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)
);

如果要将列名从“firstname”更改为“Firstname”,可以在MS SQL Server中使用sp_rename。

如果你想更改“firstname”列中数据的第一个字母,其他海报提供了解决方案,而另一个海报提供了单个名称。

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

答案 4 :(得分:1)

如果您使用 mysql ,请参阅:http://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html

  

BINARY运算符转换字符串   跟随二进制字符串。这个   是一种强制比较的简单方法   要逐字节而不是   逐字逐句。 BINARY也   导致尾随空格   显著

mysql> SELECT 'a' = 'A';
        -> 1
mysql> SELECT BINARY 'a' = 'A';
        -> 0
mysql> SELECT 'a' = 'a ';
        -> 1
mysql> SELECT BINARY 'a' = 'a ';
        -> 0

答案 5 :(得分:1)

啊,有两种方法可以阅读这个问题。第一个是基于阅读您发布的样本更新。这将失败,因为默认情况下SQL不会对字符串进行区分大小写的比较。

第二段代码暗示您想要的是ALTER TABLE并将列的名称从一个外壳更改为另一个外壳。在MS-SQL中,如果不删除整个表并重新创建它,就不能这样做,在SQL的其他方言中,将有特定于版本的DDL语法。

最后,在MS-Access中,如果列名有空格,则用双引号括起来,例如: SQL中的“My Column”将其包装在[My Column]

答案 6 :(得分:0)

你需要某种独特的行标识符,比如id,所以你可以做到

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

现在可以用作唯一行标识符的是natural vs surrogate键的巨大争论。使用你认为最适合你的例子,但我支持surogate键,因为每个自然键都有可能改变。

答案 7 :(得分:0)

这可能需要针对更多进行优化,但它将允许您甚至更新多个名字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 
相关问题