คำถามติดแท็ก datatypes

ระบุประเภทของข้อมูลที่ถูกเก็บไว้ (สตริงวันที่ตัวเลข ฯลฯ )

2
ชนิดข้อมูลสำหรับเก็บอาร์เรย์ของแฟล็ก (อาเรย์บิตแมป / บิต)
ฉันต้องการจัดเก็บบิตอาร์เรย์สำหรับแต่ละระเบียนของตารางสนับสนุนการดำเนินการต่อไปนี้: ทดสอบว่าตั้งบิตไว้หรือไม่และตั้งค่าบิต (โดยใช้ SQL) การสืบค้นและการตั้งค่าโดยใช้ ADO 2.8 (ไม่ใช่ ADO.NET) การจัดทำดัชนี (เพื่อรับประโยชน์จากคุณสมบัติ "ครอบคลุมดัชนี") จำนวนสูงสุดของบิตจะถูกเก็บไว้ในอาร์เรย์นี้ได้รับการแก้ไขแต่อาจเกิน 32 นั่นคือคอลัมน์intแบบง่าย ๆไม่ได้ผลเสมอไป จากสิ่งที่ฉันเห็นมาจนถึงตอนนี้ตัวเลือกของฉันคือ: ใช้คอลัมน์intหลายรายการ ใช้bigint (ทำงานตราบเท่าที่จำนวนบิตคือ <= 64) ใช้เลขฐานสอง ? ตัวเลือกแรกจะใช้งานได้ แต่ต้องการการรีแฟคเตอร์เล็กน้อยในรหัสที่เข้าถึงข้อมูล ตัวเลือกที่สองเป็นการผ่อนปรนชั่วคราวเท่านั้นและจากการค้นหาของฉันจนถึงตอนนี้ฉันไม่แน่ใจว่า ADO ทำงานได้ดีกับbigintหรือไม่ ฉันไม่มีประสบการณ์กับไบนารีและฉันไม่ได้ตระหนักถึงตัวเลือกอื่น ๆ คุณต้องการเลือกชนิดข้อมูลแบบใดตามข้อกำหนด

2
การเก็บราคาใน SQLite ต้องใช้ data ชนิดใด?
ฉันใช้ SQLite และต้องการเก็บราคา REALประเภทข้อมูลของ SQLite บอกว่ามันใช้floating-pointซึ่งเป็นที่เก็บข้อมูลที่ยอมรับไม่ได้สำหรับราคา มี data-type นอกเหนือจาก TEXT ที่ฉันสามารถใช้เพื่อเก็บราคาเป็นตัวเลขเพื่อให้เรียงลำดับถูกต้องหรือไม่

2
ทำไม“ SELECT POWER (10.0, 38.0);” โยนข้อผิดพลาดทางคณิตศาสตร์มากเกินไป?
ฉันอัปเดตของฉันIDENTITYสคริปต์เช็คล้นไปยังบัญชีสำหรับDECIMALและNUMERIC IDENTITYคอลัมน์ เป็นส่วนหนึ่งของการตรวจสอบฉันคำนวณขนาดของช่วงชนิดข้อมูลสำหรับทุกIDENTITYคอลัมน์ ฉันใช้มันเพื่อคำนวณเปอร์เซ็นต์ของช่วงนั้นหมดไป สำหรับDECIMALและNUMERIC ขนาดของช่วงนั้นเป็น2 * 10^p - 2ที่ที่pมีความแม่นยำ ฉันสร้างกลุ่มตารางทดสอบด้วยDECIMALและNUMERIC IDENTITYคอลัมน์และพยายามคำนวณช่วงดังนี้: SELECT POWER(10.0, precision) FROM sys.columns WHERE is_identity = 1 AND type_is_decimal_or_numeric ; สิ่งนี้ทำให้เกิดข้อผิดพลาดต่อไปนี้: Msg 8115, Level 16, State 6, Line 1 Arithmetic overflow error converting float to data type numeric. ฉัน จำกัด ให้แคบลงไปยังIDENTITYคอลัมน์ประเภทDECIMAL(38, 0)(เช่นด้วยความแม่นยำสูงสุด) ดังนั้นฉันจึงลองPOWER()คำนวณโดยตรงกับค่านั้น แบบสอบถามต่อไปนี้ทั้งหมด SELECT POWER(10.0, …

2
ทศนิยมของเซิร์ฟเวอร์ SQL (9, 0) กับ INT
หนึ่งในลูกค้าของเราใช้คอลัมน์ประเภทข้อมูลDECIMAL(18,0)ในฐานข้อมูล SQL Server 2008R2 ของเขา เนื่องจากคอลัมน์เติบโตค่อนข้างช้าเขาจึงเสนอให้เปลี่ยนประเภทข้อมูลเป็นDECIMAL(5,0)พื้นที่เก็บข้อมูลบางส่วน ตามไลบรารี MSDNพื้นที่เก็บข้อมูลของDECIMAL(5,0)ประเภทข้อมูลนั้นก็เหมือนกับDECIMAL(9,0)ประเภทข้อมูล 5 ไบต์ INTมีขนาดเล็กกว่า 1 ไบต์ แต่สามารถจัดเก็บทุกอย่างในช่วง -2 ^ 31 ถึง 2 ^ 31 แทน -99,999 ถึง 99,999 ซึ่งDECIMAL(5,0)สามารถจัดเก็บได้ แม้แต่ใหญ่ที่สุดDECIMALซึ่งพอดีกับ 5 ไบต์ ( DECIMAL(9,0)) สามารถเก็บเฉพาะจำนวนเต็มในช่วง -999,999,999 ถึง 999,999,999 (ซึ่งน้อยกว่าครึ่งหนึ่งของช่วงที่INTเสนอใน 4 ไบต์) ฉันนึกถึง "ผลประโยชน์" สองอย่างของการใช้DECIMALเกินINT: ความสามารถในการเพิ่มสเกลในภายหลังโดยไม่ต้องใช้พื้นที่เก็บข้อมูลเพิ่มเติม ความสามารถในการขยายความแม่นยำสูงถึง 38 หลักโดยไม่ต้องเปลี่ยนประเภทข้อมูล แต่นี่ไม่ใช่ประโยชน์ที่แท้จริงในความคิดของฉัน: การเพิ่มสเกลให้กับจำนวนเต็มนั้นเหมาะสมในบางกรณีเท่านั้น (ในกรณีส่วนใหญ่ที่สเกลนั้นสร้างความแตกต่างก็สามารถเพิ่มได้ล่วงหน้า) SQL Server …

4
ตรวจสอบว่าค่าใด ๆ ในคอลัมน์ NVARCHAR เป็น Unicode จริงหรือไม่
ฉันได้รับฐานข้อมูล SQL Server บางตัว มีตารางหนึ่งตาราง (ฉันจะเรียกว่า "G") มีประมาณ 86.7 ล้านแถวและกว้าง 41 คอลัมน์จากฐานข้อมูลต้นทาง (ฉันจะเรียกว่า "Q") บนมาตรฐาน SQL Server 2014 ที่ได้รับ ETL ฐานข้อมูลเป้าหมาย (ฉันจะเรียกว่า "P") ด้วยชื่อตารางเดียวกันใน SQL Server 2008 R2 Standard เช่น [Q]. [G] ---> [P]. [G] แก้ไข: 3/20/2017: บางคนถามว่าตารางแหล่งข้อมูลนั้นเป็นแหล่งข้อมูลเดียวกับตารางเป้าหมายหรือไม่ ใช่มันเป็นแหล่งเดียว เท่าที่ ETL ดำเนินไปจะไม่มีการเปลี่ยนแปลงเกิดขึ้นจริง มันมีประสิทธิภาพมีวัตถุประสงค์เพื่อสำเนา 1: 1 ของแหล่งข้อมูล ดังนั้นจึงไม่มีแผนที่จะเพิ่มแหล่งข้อมูลเพิ่มเติมลงในตารางเป้าหมายนี้ มากกว่าครึ่งหนึ่งของคอลัมน์ใน [Q] [G] …

4
NULL มีชนิดหรือไม่?
แหล่งที่มาที่หลากหลาย (เช่นWikipedia , PSOUG ) ระบุว่า Oracle nullไม่มีประเภท มันเป็นเรื่องจริงเหรอ? แล้ว RDBMS อื่น ๆ ล่ะ?
14 datatypes  null 

2
มีสิ่งต่างๆเช่นประเภทข้อมูลที่กำหนดเองหรือไม่?
MySQL มีการสนับสนุนประเภทข้อมูลที่กำหนดเองหรือไม่? ตัวอย่างเช่นอาจมีการจัดเก็บรหัสไปรษณีย์ในvarchar(10)เขตข้อมูล แต่สามารถย่อเป็นได้intโดยมีตัวเลือกว่างเปล่าและตั้งค่าสถานะว่าเป็นรหัสไปรษณีย์ 5 หลักหรือ 5 + 4 หลัก มีวิธีติดตั้งชนิดข้อมูลที่ไร้รอยต่อสำหรับสิ่งต่าง ๆ หรือไม่? เท่าที่แอปพลิเคชันเกี่ยวข้องมันจะเป็นประเภทสตริงจะมีการตัดทอนข้อมูล (โดยมีหรือไม่มีการเตือน) หากแอปพลิเคชันผ่านข้อมูลที่ไม่ถูกต้อง สามารถใช้ฟังก์ชั่นที่กำหนดเองได้ (ตัวอย่างเช่นมีฟังก์ชั่นINET_ATONบิวด์อินสำหรับที่อยู่ IPv4 แต่ไม่อนุญาตให้ทำสิ่งต่าง ๆzip LIKE '12345%'ที่ควรทำดัชนีอย่างเหมาะสมการสนับสนุนที่เขียนอย่างดีสำหรับประเภทข้อมูลที่กำหนดเองจะอนุญาตให้ทำเครื่องหมายชนิดข้อมูล เป็นจัดเรียง. ดังนั้นขนาดกะทัดรัดเมื่อเรียงลำดับจะเรียงลำดับเช่นเดียวกับถ้ามันเป็นzip intzip varchar(10) สิ่งนี้จะทำให้คอลัมน์มีความกว้างคงที่มันจะอนุญาตให้มีการลดขนาดหน่วยเก็บข้อมูลตัวแปร 6 หรือ 10 ไบต์ลงเหลือ 4 ไบต์ของความกว้างคงที่ มีการใช้งานที่เกี่ยวข้องหลายอย่าง รหัสไปรษณีย์ ที่อยู่ IPv6 ฟิลด์การประทับเวลาที่กำหนดเองที่มีความแม่นยำระดับนาทีและความจุเกินกว่าที่2038มีการใช้พื้นที่เก็บข้อมูลน้อยกว่าdatetimeแต่ไม่จำเป็นต้องสนับสนุนวันที่ก่อนปีของการนำไปใช้ (กล่าวว่า min อาจเป็น 2007 หากเป็นวันที่เก่าที่สุดในระบบ) การประทับเวลาที่ใช้ DST (ซึ่งไม่มีอยู่จริง ) รัฐสองตัวอักษรของสหรัฐอเมริกาสามารถจัดเก็บในไบต์เดียว ความยาวENUMสามารถแยกออกเป็นประเภทข้อมูลที่กำหนดเองเพื่อให้DESCRIBEผลลัพธ์ที่ได้จะไม่ยุ่งเหยิงเมื่อมองด้วยการห่อทั้งหมด …

1
วิธีการเก็บจำนวนเต็มหนึ่งไบต์ใน PostgreSQL
ในเอกสาร PostgreSQL มีการกล่าวกันว่าชนิดข้อมูลจำนวนเต็มสามารถเก็บไว้ในพื้นที่สอง, สี่หรือแปดไบต์ หนึ่งในคอลัมน์ของตารางในฐานข้อมูลของฉันมีค่าจำนวนเต็มหนึ่งไบต์และฉันต้องการเก็บไว้ในประเภทข้อมูลหนึ่งไบต์ มีส่วนขยายหรือวิธีใช้ชนิดข้อมูลจำนวนเต็มหนึ่งไบต์ใน PostgreSQL หรือไม่ NUMERIC (1,0) มีกี่ไบต์

4
ประเภทข้อมูลสำหรับหมายเลขโทรศัพท์: VARCHAR, INT หรือ BIGINT หรือไม่
ดังนั้นนี่จะเป็นคำถามจำลองของปี แต่ฉันต้องถามเนื่องจากไม่ใช่ครั้งแรกที่ฉันผ่านสิ่งนี้ ดูคำจำกัดความของตารางต่อไปนี้: ลองดูที่คอลัมน์from_numberซึ่งเป็นVARCHAR(45)ตอนนี้ แต่มันจะถือหมายเลขโทรศัพท์ เนื่องจากฉันไม่ทราบว่ามีกี่หมายเลขโทรศัพท์ที่สามารถมีได้ทั่วโลกดังนั้นฉันจึงพยายามครอบคลุมเกือบทั้งหมด ฉันต้องการให้สมบูรณ์ของฐานข้อมูลมากที่สุดเท่าที่เป็นไปได้ดังนั้นฉันคิดว่าVARCHARไม่ได้เป็นประเภทที่เหมาะสมสำหรับการถือชนิดของข้อมูลนี้ - บางทีฉันกำลังผิดคุณบอกฉัน - ดังนั้นฉันคิดในการเปลี่ยนแปลงหรือแม้กระทั่งINTBIGINT เมื่อฉันกำหนดคอลัมน์ใน Workbench ฉันควรระบุจำนวนระหว่างวงเล็บ()ไม่ใช่ทุกกรณี แต่ในรายการที่ฉันพูดถึงก่อนหน้านี้ฉันต้องทำ ดังนั้นถ้าฉันทำสิ่งนี้: BIGINT()ฉันได้รับข้อผิดพลาดนี้: ซึ่งให้คำแนะนำฉันไปอ่านเล็กน้อยเกี่ยวกับประเภท MySQL นี้ที่นี่ โดยทั่วไปข้อมูลนี้คือ: จำนวนเต็มขนาดใหญ่ ... ช่วงที่ไม่ได้ลงชื่อคือ 0 ถึง 18446744073709551615 ซึ่งทำให้ฉันถาม: สิ่งที่ฉันควรตั้งค่าสำหรับวงเล็บเมื่อฉันกำหนดBIGINT()ประเภท (ฉันใช้ BIGINT เพราะฉันไม่ทราบว่า INT สามารถถือตัวเลขได้มากเท่าที่โทรศัพท์มี - บางทีฉันก็ผิดด้วย) วิธีใดที่เหมาะสมในการสร้าง | ออกแบบคอลัมน์ในฐานข้อมูล MariaDB / MySQL อย่างไรก็ตามฉันต้องการทราบความคิดเห็นประสบการณ์และแน่นอนฉันต้องการคำตอบ หมายเหตุ:ฉันใช้ MySQL Workbench รุ่นล่าสุดเพื่อสร้างไดอะแกรม ER ฉันใช้ MariaDB …

3
ชนิดข้อมูล MySQL สำหรับจำนวนเต็ม 128 บิต
ฉันต้องการจัดเก็บจำนวนเต็ม 128 บิตที่ไม่มีเครื่องหมายใน MySQL และฉันสงสัยว่าประเภทข้อมูลที่ดีที่สุดในการจัดเก็บจำนวนมากนั้นคืออะไร ตอนนี้ผมใช้แต่ที่เกี่ยวข้องกับหลายฟังก์ชั่นแปลงbinary(16)pack(/huge number in hex .../) มีประเภทข้อมูลที่ดีที่สุดในการจัดเก็บจำนวนเต็ม 128 บิตที่ไม่ได้ลงชื่อ?
12 mysql  datatypes 

1
SQL Server Query Plan XML: ความยาว QueryPlanHash
UPDATE:นี่เป็นข้อผิดพลาดอย่างแน่นอน สำหรับรายละเอียดทั้งหมดดูรายการเชื่อมต่อนี้ ในขณะที่ทดสอบการเปลี่ยนแปลงบางอย่างกับsp_BlitzCache (การเปิดเผยอย่างสมบูรณ์ฉันเป็นหนึ่งในผู้แต่ง) ฉันเจอสิ่งที่ฉันคิดว่าเป็นข้อบกพร่องในรหัสของเรา ณ จุดหนึ่งเรากำลังจับคู่แฮชแผนแบบสอบถามเพื่อรับค่าใช้จ่ายแบบสอบถาม เราทำเช่นนั้นเกี่ยวกับเช่น: statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) = xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float') สิ่งนี้ได้ผลเท่าที่ฉันเคยเห็น อย่างไรก็ตามในกรณีที่แปลกหนึ่งสตริงย่อยใน XML กำลังส่งNULLค่าและแผนแสดงค่า 0 แม้ว่ามันจะค่อนข้างสูง เมื่อขุดเข้าไปในแผนปฏิบัติการ (การเปิดเผยอย่างเต็มรูปแบบฉันทำงานให้กับ บริษัท ที่เป็นเจ้าภาพวางแผน) ฉันสังเกตเห็นว่าแฮชแผนแบบสอบถามสำหรับแฮชปัญหาเดียวมีแฮช 17 ตัวในขณะที่ที่เหลือคือ 18 นี่คือตัวอย่าง: QueryPlanHash = "0x4410B0CA640CDA89" QueryPlanHash = "0x2262FEA4CE645569" QueryPlanHash = "0xED4F225CC0E97E5" - ปัญหา! QueryPlanHash = "0xBF878EEE6DB955EA" QueryPlanHash = "0x263B53BC8C14A452" QueryPlanHash = "0x89F5F146CF4B476F" QueryPlanHash = …

2
PostgreSQL: ส่งผ่านตารางเป็นอาร์กิวเมนต์ในฟังก์ชัน
ฉันกำลังค้นพบTYPEใน PostgreSQL ฉันมีTABLE TYPEตารางที่ต้องเคารพ (อินเตอร์เฟส) ตัวอย่างเช่น: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] …

1
CASE expression ส่งคืนค่าที่ผิดเมื่อใช้ CEILING
ฉันพบปัญหาที่CASEนิพจน์ไม่ส่งคืนสิ่งที่ฉันคาดหวัง ในการทดสอบฉันเพิ่มตัวแปรทศนิยมและใช้CASEนิพจน์เดียวกันกับมันและใช้งานได้ดีส่งคืนผลลัพธ์ตามที่คาดไว้ (ปัดเศษค่าขึ้นเมื่อIsGun=1แต่เมื่อฉันเรียกใช้CASEนิพจน์เดียวกันกับค่าทศนิยมอื่นมันจะส่งกลับเสมอ ค่าที่มีCEILING()ฟังก์ชั่นและจะไม่ส่งคืนค่าเดิม นี่คือรหัส SQL: DECLARE @Num decimal(8,2); set @Num = 12.54; WITH PQ AS ( SELECT UPC, Price1, DBID, AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg FROM vProducts_PriceQty_Union ) SELECT PQ.UPC, PQ.Price1, PQ.Price1Avg, (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar, CAST( (CASE WHEN …

1
ผลลัพธ์ที่น่าแปลกใจสำหรับประเภทข้อมูลที่มีตัวแก้ไขประเภท
ในขณะที่พูดคุยโซลูชัน CTE แบบเรียกซ้ำสำหรับคำถามนี้: รับ 5 ค่าที่แตกต่างล่าสุดสำหรับแต่ละ ID @ypercubeพบข้อผิดพลาดที่น่าแปลกใจซึ่งทำให้เราตรวจสอบการจัดการกับตัวดัดแปลงประเภท เราพบพฤติกรรมที่น่าประหลาดใจ 1. Type cast ยังคงประเภทโมดิฟายเออร์ในบางบริบท แม้เมื่อสั่งไม่ให้ ตัวอย่างพื้นฐานที่สุด: SELECT 'vc8'::varchar(8)::varchar หนึ่งอาจคาดหวังvarchar(ไม่มีตัวดัดแปลง) อย่างน้อยฉันจะ แต่ผลลัพธ์คือvarchar(8)(พร้อมตัวดัดแปลง) กรณีที่เกี่ยวข้องจำนวนมากในซอด้านล่าง 2. การต่อข้อมูล Array สูญเสียโมดิฟายเออร์ในบริบทบางอย่าง โดยไม่จำเป็นต้องใช้ดังนั้นข้อผิดพลาดนี้อยู่ฝั่งตรงข้าม: SELECT ARRAY['vc8']::varchar(8)[] , ARRAY['vc8']::varchar(8)[] || 'vc8'::varchar(8) นิพจน์แรกให้ผลvarchar(8)[]ตามที่คาดไว้ แต่ข้อที่ 2 หลังจากการต่อข้อมูลอื่นvarchar(8)จะถูกรดน้ำลงไปเพียงvarchar[](ไม่มีตัวปรับแต่ง) พฤติกรรมที่คล้ายกันจากarray_append()ตัวอย่างในซอด้านล่าง ทั้งหมดนี้ไม่สำคัญในบริบทส่วนใหญ่ Postgres จะไม่สูญเสียข้อมูลและเมื่อกำหนดให้กับคอลัมน์ค่าจะถูกบังคับให้เป็นประเภทที่ถูกต้องอย่างไรก็ตาม อย่างไรก็ตามการทำผิดในทิศทางตรงกันข้ามจะทำให้เกิดข้อยกเว้นที่น่าประหลาดใจ: 3. Recursive CTE ต้องการประเภทข้อมูลให้ตรงกัน รับตารางง่ายนี้ CREATE TABLE a ( …

1
เหตุใด 10 ^ 37/1 จึงเกิดข้อผิดพลาดทางคณิตศาสตร์มากเกินไป
ต่อแนวโน้มล่าสุดของฉันในการเล่นกับจำนวนมากฉันเพิ่งต้มข้อผิดพลาดที่ฉันกำลังทำงานลงไปที่รหัสต่อไปนี้: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; ผลลัพธ์ที่ฉันได้รับสำหรับรหัสนี้คือ: 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. อะไร? ทำไมการดำเนินการ 3 รายการแรกถึงทำงานได้ …

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