2009-07-30 4 views
3

초보자를위한 SQL 튜토리얼을 시작했습니다. 지금 몇 가지 연습을하고 있는데 제목을 변경하는 방법을 알고 싶습니다.sql에서 대/소문자를 비교하려면 어떻게합니까?

여기를 보면 내가 성, 성, 직위, 나이 및 급여를 작성했음을 알 수 있습니다. 그리고 편지를 작은 편지로 썼습니다. 어떻게 대문자로 바꿀 수 있습니까?

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

을하지만 나중에 하나가 작동하지 않습니다 실현 :

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

나는 이것을 사용했습니다.

감사

====

추가 질문 :

나는 또한 내가 공백으로 쓴 경우, 다음의 인식되지 않는 것을 알 수 있습니다. 그것은 표시 될 첫 번째 부분입니다. 왜 그 일을하는지 알아? 감사합니다

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

==========

는 모든 입력 주셔서 감사합니다. "이름"을 "Fname"으로 바꾸는 데이 이름을 사용했지만 작동하지 않았습니다. 내가 뭐 놓친 거 없니? 고유 한 행 indentifier이 natural surrogate 대 키의 거대한 논쟁이로 사용할 수 있습니다 지금의
update mytablename set firstname = 'Firstname' where id = 1 

을 할 수 있도록

alter table myemployees_tr0214 
rename column Firstname to Fname; 
+0

를 업데이트 할 수 있도록이 숙제 정말인가? – tomfanning

+0

@tomfanning : 아니 숙제가 아닙니다. 나는 SQL 초보자를위한 온라인 튜토리얼을하고있다. 테스트 테이블에 정보를 작성하고 삽입하는 동안 테이블에 작은 글자 제목을 삽입했다는 사실을 깨달았습니다. 나는 아직 튜토리얼에서 그것을 만나지 않았다. – tintincutes

+0

대소 문자가 SQL 표준에 정의되어 있지 않습니다. 데이터베이스에 따라 달라집니다. – skaffman

답변

1

아로,이 질문을 읽을 수있는 두 가지 방법이있다. 첫 번째는 게시 한 샘플 업데이트를 읽는 것을 기반으로합니다. SQL은 기본적으로 문자열에 대/소문자를 비교하지 않기 때문에 실패합니다.

코드의 두 번째 부분은 ALTER TABLE에 대한 것이었고 열 이름을 한 케이스에서 다른 것으로 바꾸는 것을 의미합니다. MS-SQL에서는 전체 테이블을 삭제하고 다시 작성하지 않고는 SQL을 사용할 수 없습니다. 다른 SQL 언어에서는 버전 별 DDL 구문이 있습니다.

마지막으로 MS-Access에서 열 이름에 공백이 있으면 큰 따옴표로 묶습니다. SQL에서 "내 열"이것은 더 최적화 될 필요가있다

0

당신은 ID와 같은 고유 한 행 indentifier의 일종이 필요합니다. 당신이 생각하는 것을 사용하는 것이 가장 좋다고 생각하지만 모든 자연 키가 변경 될 가능성이 있기 때문에 나는 대용 키를지지합니다.

+0

@Mladen Prajdic : 의견을 보내 주셔서 감사합니다. 아직 자연스럽지 않고 대리모가 없습니다. 곧 만날 수 있습니다. 작은 테이블을 쓰는 대신 내 테이블을 다시 만들어야합니다. 나는 그것을 capitel 편지로 바꿀 것입니다. 어쩌면 나 같은 초보자들에게는 좋을 것이다. 감사합니다 – tintincutes

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

이것은 값을 firstName을 열을 갱신한다. 당신이하려는 것은 firstname 칼럼의 이름을 바꾸는 것이다. 이 작업을 수행하는 방법은 사용중인 데이터베이스 (언급하지 않은 데이터베이스)에 따라 다릅니다.

MS Access 또는 SQL 서버 인 경우 UI에서 테이블을 열고 디자이너를 사용하여 열 이름을 변경할 수 있습니다.

그렇지 않으면 here과 같이 SQL ALTER TABLE 문을 사용할 수 있습니다. 당신이 정말이의 이름을 변경하려는 경우가 아니면,

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

희망이 당신이 :)

+0

@ 조 : 나는이 웹 사이트 http://sqlcourse.com에서 SQL 인터프리터를 사용하고 있습니다. 어제 나에게 추천되었다. Ms 액세스 또는 SQL Server인지 확실하지 않습니다. 나는 그것의 SQL 서버가 – tintincutes

3

입력란. 모든 일이 SQL을 배우는 것이라면 그렇게 중요하지 않습니다. 그렇게하기위한 문법을 ​​배우고 싶다면, 물론 그것은 가치있는 연습이 될 것입니다. 그러나 그것 이외에는, 나는 그렇게 할 것입니다.

편집 한 질문에 이름에 공백이 포함되어 있습니다. 허용되지 않습니다. "SQL 식별자"를 구성하는 규칙 (테이블, 열, 제약 조건 등)은 엄격한 규칙을 가지고 있으며 간단하게 문자, 밑줄 및 숫자 만 사용해야한다는 점을 제외하고는 자릿수로 시작하지 마라.

이제는 SQL을 배우는 데 사용하는 온라인 웹 사이트에서 내가 알지 못하는 공백을 추가 할 때 불평하지 않고 조금 의심스러운 이유를 설명합니다. 실제로 알려진 데이터베이스 엔진을 사용하는 것처럼 들리지는 않습니다. 거기에 공백이있을 때와 여분의 단어를 사용하면 일반적인 데이터베이스 엔진이 잘못된 구문에 대해 불평 할 수 있습니다.

위해이 같은, 그것을 수정하거나 밑줄 대신 공백 또는 계약을 추가하고 camelCasing을 사용하려면

: 이름, 성

+0

@ Paul Janaway : 내 칼럼의 제목 만 바꿀 것인가? 감사합니다 – tintincutes

+0

그것은 필드 이름을 변경하지 않습니다 그게 무슨 뜻인지, 그것은 필드의 데이터를 변경합니다. 당신이 필드 firstname : paul, bob, peter ... 안에 있다면, 그것들을 Paul, Bob, Peter – pjanaway

2

먼저 도움 : 이것은 대문자 첫 글자에 테이블의 모든 firstnames를 업데이트해야

+0

으로 바꾸지 않을 것입니다. 필자가 잘 알고있는 RDBMS에서는 열 이름에 인용 부호가 있으면 공백을 허용합니다. 테이블 T를 만듭니다 ("DO NO DO THIS"varchar (10)). –

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 서버에서 sp_rename을 사용할 수 있습니다.

"firstname"열의 데이터 첫 글자를 변경하려면 다른 포스터가 솔루션을 제공했으며 여기에는 하나의 이름에 대한 다른 문자가 있습니다.

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

당신이 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 
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 
관련 문제