database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 1884 게시물 읽기
No. 1884
황당한 len 함수
작성자
김치열
작성일
2007-04-13 17:39
조회수
6,583

select len('a')

select len('')

위 두개의 쿼리 결과가 1로 같습니다.
Sybase 12.5 에서 버그 같은데 다른 버젼에서도 그런가요?

이 글에 대한 댓글이 총 4건 있습니다.

맞습니다.

''도 null이 아닌 space입니다.

그러므로 1이 맞습니다

지연님이 2007-04-18 14:20에 작성한 댓글입니다. Edit

select @@version                                                                                                                       
--------------------------------------------------------------------------------------------------------------------------------
Sybase IQ/12.6.0/061010/P/ESD 7.1/RS6000MP/AIX 5.1.0/64bit/2006-10-10 14:26:01                                                  

1 Row(s) affected
.

select length('a')
-----------
1          

1 Row(s) affected
.

select length('') 
-----------
0          

1 Row(s) affected

지나가다가님이 2007-04-18 16:31에 작성한 댓글입니다.
이 댓글은 2007-04-18 16:34에 마지막으로 수정되었습니다. Edit

iq는 위의 결과가 맞고요,


ase는 1이 나오는게 맞습니다.


len은 char_length와 같은 function인데,

char length가 0이 있을수는 없지요.

1보다 크거나 아니면 null 이거나 이지요~~

지연님이 2007-04-19 12:53에 작성한 댓글입니다.
이 댓글은 2007-04-19 12:55에 마지막으로 수정되었습니다. Edit

1. 문자열이 1보다 크거나 null이라는 견해에 대해
   null 문자열과 과 길이가 0인 문자열은 다릅니다. 내부 구현이야 언어마다 다르겠지만, 문자열의
   헤더/트레일러가 할당되느냐의 차이를 나타냅니다. SQL에서는 한술 더떠서 뒷 꼬리에 붙은
   공백(ascii code 32)를 무시합니다.

   하단의 쿼리를 보죠~
  
   >select '' as col1, null as col2 into #temp
   >select * from #temp

   출력결과는 col1 과 col2는 결과가 다릅니다.  문자열이 항상 1보다 크거나 null 이라면 위의
   결과가 나올 수 있을까요?

2. ''은 space라는 견해에 대해
   SQL에서 공백이 아닌 문자 앞의 공백은 제거하지 않는다는 것을 생각해 보면 논리적으로 문제가
   있는 부분입니다.'' 가 공백(ascii code 32)과 같다면, 실제 Sybase 상에서의 결과는 논외로 치고
   다음의 두 결과는 같아야 합니다.
   
   > '' + 'a'
   > ' ' + 'a'

   결과는 같지 않죠. 더구나 이렇게 되면 길이가 1인 문자열과 길이가 1인 문자열을 더해서 길이가
   1인 문자열이 나온다는 엉뚱한 산수도 허용이 되버립니다(프로그래밍 언어에서 '' 문자열의 길이는
   항상 0입니다. 1인 경우는 프로그래머가 클래스를 그렇게 작성한 경우를 제외하고는 아마 없을
   겁니다).
 

   MS-SQL에서 하단의 쿼리를 테스트 해봤는데 결과는 1, 0 입니다. Oracle이나 Sybase15에서는
   어떨지 모르겠네요.

    >select len('a')
    >select len('')



    ps. 까칠하게 따지고 들어서 죄송하긴 합니다만 설명을 위해서 그런 것이니 이해해 주세요.

김치열님이 2007-04-19 16:12에 작성한 댓글입니다.
이 댓글은 2007-04-19 16:19에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1887결과가 안나오네요.... ^^: [3]
김정훈
2007-04-18
5371
1886dbm: no open database 이건 뭔가요? [1]
알고싶어요
2007-04-17
4394
1885select시 row를 5개만 가져옵니다.[DBPool사용에러]
강민현
2007-04-16
5006
1884황당한 len 함수 [4]
김치열
2007-04-13
6583
1883C++로 개발할때 궁금한 점..
제발요
2007-04-13
4275
1882집에서 사이베이스를 연습할수 있는 방법좀,,, [1]
김병국
2007-04-13
5199
1881iq 를 개인 피시에 설치할수 있는지... [1]
김병국
2007-04-13
4770
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다