คุณจะสร้างเขตข้อมูลบูลีน yes / no ในเซิร์ฟเวอร์ SQL ได้อย่างไร


328

แนวปฏิบัติที่ดีที่สุดสำหรับการสร้างเขตข้อมูลyes/noคืออะไรBooleanเมื่อแปลงจากaccess databaseหรือโดยทั่วไป

คำตอบ:


441

เทียบเท่าเป็นBITสนาม

ในSQLคุณใช้0และ1ตั้งค่าฟิลด์บิต (เช่นเดียวกับฟิลด์ใช่ / ไม่ใช่ใน Access) ใน Management Studio จะแสดงเป็นค่าเท็จ / จริง (อย่างน้อยในเวอร์ชันล่าสุด)

เมื่อเข้าถึงฐานข้อมูลผ่าน ASP.NET ระบบจะแสดงฟิลด์เป็นค่าบูลีน


3
และถ้าคุณเชื่อมโยงตารางในฐานข้อมูล Access จริงจะมีค่า -1 และเท็จจะมีค่า 0 อย่างน้อยใน Access 2003 (นี่คือรุ่นที่ฉันมีประโยชน์ที่เชื่อมต่อกับฐานข้อมูล MSSQL ของลูกค้า)
Henrik Erlandsson

2
โปรดทราบว่ามันไม่เทียบเท่า หากฟังก์ชันสเกลาร์ส่งกลับค่าบิตคุณยังคงต้องทดสอบว่าเป็น 0 หรือ 1 ตัวอย่างเช่น dbo.IsReturnsBit (ค่า) = 1
Darren Griffith

@ D-Money: ใช่ แต่คุณต้องทำการเปรียบเทียบเท่านั้นหากคุณต้องการใช้ค่าในเงื่อนไข หากคุณใช้ค่าในผลลัพธ์คุณไม่ควรทำการเปรียบเทียบ
Guffa

Re Mgt สตูดิโอ, ถ้าคุณเป็นสำเนา + วางข้อมูลที่คุณจำเป็นต้องมีมันเป็นถูก / ผิดยังไม่เป็นที่ 1 หรือ 0.
gorlaz

110

BITประเภทข้อมูลโดยทั่วไปจะใช้ในการจัดเก็บbooleanค่า ( 0สำหรับfalse, 1สำหรับtrue)


1
มีการBITระบุไว้ใน SQL มาตรฐานหรือไม่ ฉันพบว่ามันยาก ที่ใกล้ที่สุดที่ฉันเห็นคือ "ประเภทบูลีน"
asgs

1
คุณกังวลหรือไม่ว่าความหมายของบิตและบูลีนต่างกันหรือไม่?
Darth Egregious


20

คุณสามารถใช้BITสนาม

สำหรับการเพิ่มคอลัมน์ BIT ในตารางที่มีอยู่คำสั่ง SQL จะมีลักษณะดังนี้:

ALTER TABLE table_name ADD yes_no BIT

CREATE TABLE table_name (yes_no BIT)หากคุณต้องการที่จะสร้างตารางใหม่ที่คุณสามารถทำ:


19

คุณสามารถใช้ชนิดข้อมูล bit

แทรกค่าที่มากกว่า 0 จะถูกเก็บเป็น '1'

ใส่ค่าที่น้อยกว่า 0 จะถูกเก็บเป็น '1'

ค่าที่แทรกเป็น '0' จะถูกเก็บไว้เป็น '0'

สิ่งนี้ถือเป็นจริงสำหรับ MS SQL Server 2012 Express


1
คุณแน่ใจเกี่ยวกับข้อความที่เกี่ยวกับค่าที่น้อยกว่า 0 หรือไม่?
BiLaL

3
@BiLaL นี่เป็นพฤติกรรมที่พบได้ทั่วไปในภาษาส่วนใหญ่ 0เป็นเท็จไม่ใช่0ตัวเลขใด ๆเป็นจริง มันก็เป็นเรื่องธรรมดาสำหรับ -1 ที่จะเป็นค่าเริ่มต้นสำหรับจริงเพราะในไบนารีที่ลงนามแล้วมันมีทุกชุดบิตเป็น 1 ทุกวันนี้มันเป็นเรื่องธรรมดามากที่จะเห็น 1 เป็นค่าเริ่มต้นสำหรับจริง (เฉพาะชุดบิตที่สำคัญน้อยที่สุด)
CJ Dennis

16

มีคำตอบที่บอกว่าใช้ Bit อยู่แล้ว ฉันจะเพิ่มคำตอบเหล่านี้ให้มากขึ้น

คุณควรใช้บิตเพื่อแทนค่าบูลีน

ข้อสังเกตจากบทความ MSDN

บิตสามารถรับค่า 1, 0 หรือ NULL

โปรแกรมฐานข้อมูลเซิร์ฟเวอร์ SQL จะปรับการจัดเก็บคอลัมน์บิตให้เหมาะสม หากมี 8 บิตหรือน้อยกว่าคอลัมน์ในตารางคอลัมน์จะถูกจัดเก็บเป็น 1 ไบต์ หากมีตั้งแต่ 9 ถึง 16 บิตคอลัมน์จะถูกเก็บไว้เป็น 2 ไบต์และอื่น ๆ

ค่าสตริง TRUE และ FALSE สามารถแปลงเป็นค่าบิต: TRUE ถูกแปลงเป็น 1 และ FALSE ถูกแปลงเป็น 0

การแปลงเป็นบิตจะส่งเสริมค่าที่ไม่ใช่ศูนย์ใด ๆ ให้เป็น 1

การอ้างอิง

หมายเหตุ: เป็นการดีที่จะเก็บค่าเป็น 1 และ 0 กับชนิดข้อมูลเท่านั้น NOT NULL

Bit มีค่า 1, 0 และ NULL ดูตารางความจริงสำหรับสิ่งนี้ ดังนั้นวางแผนค่าให้เหมาะสม มันอาจเพิ่มความสับสนโดยอนุญาตให้ค่า NULL สำหรับชนิดข้อมูลบิต

ป้อนคำอธิบายรูปภาพที่นี่

การอ้างอิง



12

คุณสามารถใช้BITสนาม

วิธีสร้างตารางใหม่:

CREATE TABLE Tb_Table1
(
ID              INT,
BitColumn       BIT DEFAULT 1
)

การเพิ่มคอลัมน์ในตารางที่มีอยู่:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

ในการแทรกบันทึก:

INSERT Tb_Table1 VALUES(11,0)

9

bitจะง่ายที่สุดและยังใช้พื้นที่น้อยที่สุด ไม่ verbose มากเมื่อเทียบกับ "Y / N" แต่ฉันไม่เป็นไร


4
มันดีกว่าที่ฉันคิด - ไม่ต้องกังวลกับ Y == y และ N = n บริสุทธิ์หรือเท็จจริง ความตั้งใจที่จะเห็นได้ชัดโดยสิ้นเชิงและไม่มีกรณีที่ "พิเศษ" ที่เขตข้อมูลตัวอักษรเดียวเชิญ :)
ร็อบแกรนท์

5

bitเป็นตัวเลือกที่เหมาะสมที่สุด ไม่เช่นนั้นฉันเคยใช้intเพื่อจุดประสงค์นั้น 1สำหรับtrueและสำหรับ0false


2
โดยปกติจะใช้ 0 สำหรับเท็จและไม่เป็นศูนย์สำหรับ True
Edu

2
มีรสชาติหรือความจริงมากมายที่บอกว่าเป็นนักการเมืองที่ดี: D
Buda Florin

1

ใน SQL Server Management Studio ทุกรุ่นให้ใช้BITเป็น Data Type

ซึ่งจะให้ตัวเลือกTrueหรือFalseค่าแก่คุณ ในกรณีที่คุณต้องการใช้อย่างเดียว1หรือ0จากนั้นคุณสามารถใช้วิธีนี้:

CREATE TABLE SampleBit(
    bar int NOT NULL CONSTRAINT CK_foo_bar CHECK (bar IN (-1, 0, 1))
)

แต่ผมจะให้คำแนะนำอย่างเคร่งครัดBITในฐานะที่ดีที่สุดตัวเลือก หวังอย่างเต็มที่มันช่วยคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.