development

SQLite에 부울 값 저장

big-blog 2020. 4. 2. 08:16
반응형

SQLite에 부울 값 저장


SQLite에서 BOOL 값의 유형은 무엇입니까? 내 테이블 TRUE / FALSE 값에 저장하고 싶습니다.

INTEGER의 열을 만들어 0 또는 1의 값으로 저장할 수는 있지만 BOOL 유형을 구현하는 가장 좋은 방법은 아닙니다.

방법이 있습니까?

감사.


SQLite에 대한 기본 부울 데이터 유형이 없습니다. 데이터 유형 문서:

SQLite에는 별도의 부울 스토리지 클래스가 없습니다. 대신 부울 값은 정수 0 (거짓) 및 1 (참)로 저장됩니다.


SQLite 부울 데이터 유형 :
SQLite에는 별도의 부울 저장소 클래스가 없습니다. 대신 부울 값은 정수 0 (거짓) 및 1 (참)로 저장됩니다.

이 방법으로 부울을 int로 변환 할 수 있습니다.

int flag = (boolValue)? 1 : 0;

다음과 같이 int를 부울로 다시 변환 할 수 있습니다.

 // Select COLUMN_NAME  values from db. 
 // This will be integer value, you can convert this int value back to Boolean as follows
Boolean flag2 = (intValue == 1)? true : false;

sqlite를 탐색하려면 자습서가 있습니다.
나는 여기에 하나의 대답을 주었다 . 그들을 위해 일하고 있습니다.


SQLite에서 할 수있는 최선의 방법은 정수 0과 1을 사용하여 false와 true를 나타내는 것입니다. 다음과 같이 열 유형을 선언 할 수 있습니다.

CREATE TABLE foo(mycolumn BOOLEAN NOT NULL CHECK (mycolumn IN (0,1)));

0과 1 외에 NOT NULL허용하려는 경우 생략하십시오 NULL.

BOOLEAN여기 에서 유형 이름의 사용은 가독성을 위해 사용되며 SQLite 는 NUMERIC 선호도가 있는 유형 일뿐 입니다.

참고 CHECK 제약 때문에 지원 된 SQLite는 3.3.0 (2006 년).

다음은 작동하는 INSERT 예제입니다. (문자열과 부동 소수점 숫자가 정수로 구문 분석되는 방법에 유의하십시오)

sqlite> INSERT INTO foo VALUES(0);
sqlite> INSERT INTO foo VALUES(1);
sqlite> INSERT INTO foo VALUES(0.0);
sqlite> INSERT INTO foo VALUES(1.0);
sqlite> INSERT INTO foo VALUES("0.0");
sqlite> INSERT INTO foo VALUES("1.0");
sqlite> select mycolumn, typeof(mycolumn) from foo;
0|integer
1|integer
0|integer
1|integer
0|integer
1|integer

그리고 일부는 실패 할 것입니다 :

sqlite> INSERT INTO foo VALUES("-1");
Error: constraint failed
sqlite> INSERT INTO foo VALUES(0.24);
Error: constraint failed
sqlite> INSERT INTO foo VALUES(100);
Error: constraint failed
sqlite> INSERT INTO foo VALUES(NULL);
Error: foo.mycolumn may not be NULL
sqlite> INSERT INTO foo VALUES("true");
Error: constraint failed
sqlite> INSERT INTO foo VALUES("false");
Error: constraint failed

값이 0 및 1 인 정수 데이터 유형을 사용하는 것이 가장 빠릅니다.


그러나 여러 묶음을 저장하려면 비트 시프트를 사용하여 유닉스 파일 사용 권한 / 모드와 같은 하나의 int로 모두 저장할 수 있습니다.

예를 들어 모드 755의 경우 각 숫자는 소유자, 그룹, 공개와 같은 다른 사용자 클래스를 나타냅니다. 각 숫자 내에서 4를 읽고, 2를 쓰고, 1을 실행하므로 7은 이진 111과 같이 7입니다. 5를 읽고 실행하여 101을 실행합니다. 고유 한 인코딩 체계를 구성하십시오.

나는 Schedules Direct에서 TV 일정 데이터를 저장하기 위해 무언가를 쓰고 있는데 스테레오, hdtv, 새로운, ei, 클로즈 캡션, dolby, 스페인어 수액, 시즌 프리미어 등 바이너리 또는 예 / 아니오 필드가 있습니다. 따라서 7 비트 또는 최대 127의 정수입니다. 실제로 한 문자입니다.

내가 지금하고있는 것의 AC 예. has ()는 두 번째 문자열이 첫 번째 문자열에 있으면 1을 반환하는 함수입니다. inp는이 함수의 입력 문자열입니다. misc는 0으로 초기화 된 부호없는 문자입니다.

if (has(inp,"sap='Spanish'") > 0)
  misc += 1;
if (has(inp,"stereo='true'") > 0)
  misc +=2;
if (has(inp,"ei='true'") > 0)
  misc +=4;
if (has(inp,"closeCaptioned='true'") > 0)
  misc += 8;
if (has(inp,"dolby=") > 0)
  misc += 16;
if (has(inp,"new='true'") > 0)
  misc += 32;
if (has(inp,"premier_finale='") > 0)
  misc += 64;
if (has(inp,"hdtv='true'") > 0)
  misc += 128;

그래서 7 개의 부울을 하나의 정수에 더 많은 공간을 저장하고 있습니다.


ericwa의 답변에 더. CHECK 제약 조건은 TEXT 데이터 유형을 적용하고 TRUE 또는 FALSE의 경우에만 특정 값을 허용하여 의사 부울 열을 활성화 할 수 있습니다.

CREATE TABLE IF NOT EXISTS "boolean_test"
(
    "id" INTEGER PRIMARY KEY AUTOINCREMENT
,   "boolean" TEXT NOT NULL 
        CHECK( typeof("boolean") = "text" AND
               "boolean" IN ("TRUE","FALSE")
        )
);

INSERT INTO "boolean_test" ("boolean") VALUES ("TRUE");
INSERT INTO "boolean_test" ("boolean") VALUES ("FALSE");
INSERT INTO "boolean_test" ("boolean") VALUES ("TEST");

Error: CHECK constraint failed: boolean_test

INSERT INTO "boolean_test" ("boolean") VALUES ("true");

Error: CHECK constraint failed: boolean_test

INSERT INTO "boolean_test" ("boolean") VALUES ("false");

Error: CHECK constraint failed: boolean_test

INSERT INTO "boolean_test" ("boolean") VALUES (1);

Error: CHECK constraint failed: boolean_test

select * from boolean_test;

id  boolean
1   TRUE
2   FALSE

다음을 사용하여 위의 방정식을 단순화 할 수 있습니다.

boolean flag = sqlInt != 0;

부울의 int 표현 (sqlInt)이 0 (false)이면 부울 (flag)은 false이고 그렇지 않으면 true입니다.

간결한 코드는 항상 작동하는 것이 좋습니다 :)


업데이트 테이블 SET Boolcolumn = '1'WHERE ......


다른 방법은 TEXT 열입니다. 그런 다음 데이터베이스에서 값을 저장 / 읽기 전후에 부울 값과 문자열 사이에서 부울 값을 변환하십시오.

전의. 당신은 "boolValue = true;"

문자열로 :

//convert to the string "TRUE"
string StringValue = boolValue.ToString;  

그리고 부울로 돌아 가기 :

//convert the string back to boolean
bool Boolvalue = Convert.ToBoolean(StringValue);

참고 URL : https://stackoverflow.com/questions/843780/store-boolean-value-in-sqlite

반응형