刚刚为初学者启动了SQL教程。我现在正在做一些练习,我想知道如何更改标题。
如果你看这里:你会看到我已经取得了名字,姓氏,头衔,年龄和薪水。我用小写字母写了这些信。 如何将其更改为大写字母?
我试过用这个:
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;
答案 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