2011-11-03 3 views
4

Sybase 및 MSSqlServer TransactSQL에서 열 값이 null 일 때 형식화 된 기본값을 반환하는 IsNull (columnName, valueForNull) 함수가 있습니다. SQLite에서이 기능을 어떻게 복제 할 수 있습니까? 트랜 잭트 SQL에서SQLite의 Null 대체 :

예 :

select IsNull(MyColumn,-1) as MyColumn from MyTable 

MyColumn가 널이면,이 표현은 반환 MyColumn -1의 값. 비슷한 SQLite를하고 싶습니다.

(예, 나는이 문제를 처리하기 위해 내 자신의 래퍼 함수를 ​​작성할 수있어 - 그게 내가 찾고 있어요 답이 아니다)

TIA는

답변

6

당신은 사용할 수 있습니다 ifnull :

select ifnull(MyColumn,-1) as MyColumn from MyTable 
+1

ifnull (MyColumn, -1) * 정확하게 * 내 질문에 대한 답변입니다. 아직도, @ Larry Lustig은 전혀 특별한 기능이없는 완전히 일반적인 SQL 솔루션을 제공하고 있습니다. – Vector

2

SQLite는 여기에 시도하는 것 같아 보이는 기능을 내장 한 IFNULL() 내장 함수가 있습니다.

6

당신은 표준 COALESCE function 사용해야합니다

select coalesce(MyColumn, -1) as MyColumn from MyTable 

그래서으로 얻을 수있는 좋은 습관 사용하여 유착을 지원하는 표준 ANSI SQL을 이해하고 모든 데이터베이스를.

+1

@Mikey : 표준 SQL 함수를 사용하는 것은 해킹입니까? 모호? 나는 네가 오해 한 것 같아. COALESCE는 * 값 * 집합에서 NULL이 아닌 첫 번째 값을 반환하기위한 것이고 함수는 * 열 *이 아닌 * values ​​*에서 작동하는 것처럼 열이 무엇인지 알지도 못합니다. 위의 내용은 COALESCE의 예상되고 관용적 인 사용이며 [PostgreSQL 매뉴얼] (http://www.postgresql.org/docs/9.0/interactive/functions-conditional.html#AEN15548)의 예제와도 일치합니다. 비표준 함수를 사용하는 것은 해킹이며 표준 SQL 함수를 사용하는 것은 해킹이 아닌 사용을 목적으로합니다. –

+0

+1 - 내 의견을 철회했습니다. 돌아 오는 길에 똑같은 것을 깨달았습니다. 표준이 아니기 때문에 표준 언어 기능을 해킹 할 수 있습니다.하지만 일련의 값을 검사하고 하드 코딩 된 값은 집합 멤버가 될 수있는 또 다른 값. – Vector

3

이 작업을 수행하는 SQL 표준 방법은 CASE 함께 : 엔진 관련 IFNULL보다

SELECT CASE WHEN MyColumn IS NULL THEN -1 ELSE MyColumn END FROM MyTable 

상당히 더 자세한 정보, ISNULL, 뉴질랜드 기능을하지만, 더 휴대용.

(또는 mu가 지적했듯이이 경우 더 나은 COALESCE를 사용할 수 있습니다.)

+0

이 정보를 제공해 주셔서 감사합니다. – Vector