คำถามติดแท็ก type-conversion

1
ฉันจะแปลงจาก Double Precision เป็น Bigint ด้วย PostgreSQL ได้อย่างไร
ฉันต้องการแปลงค่าของ Double Precision เป็น Bigint ด้วย PostgreSQL ฉันจะทำสิ่งนั้นได้อย่างไร ฉันลองแล้วto_bigint(myvalue)แต่ฟังก์ชั่นนั้นไม่มีอยู่จริง

1
คำเตือนในแผนแบบสอบถาม“ Cardinality Estimate”
create table T(ID int identity primary key) insert into T default values insert into T default values go select cast(ID as varchar(10)) as ID from T where ID = 1 แบบสอบถามด้านบนมีคำเตือนในแผนแบบสอบถาม <Warnings> <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT(varchar(10),[xx].[dbo].[T].[ID],0)" /> </Warnings> ทำไมถึงมีคำเตือน? นักแสดงในรายการฟิลด์จะมีผลต่อการประมาณค่า cardinality อย่างไร

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
มีสิ่งต่างๆเช่นประเภทข้อมูลที่กำหนดเองหรือไม่?
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ผลลัพธ์ที่ได้จะไม่ยุ่งเหยิงเมื่อมองด้วยการห่อทั้งหมด …

3
ประสิทธิภาพการทำงานยอดเยี่ยมใช้ CAST ใน T-SQL
เรามีเครื่องกำเนิดไฟฟ้า SQL ที่ส่งเสียง SQL งบเงื่อนไขทั่วไปสำหรับเขตข้อมูลที่ระบุไว้ (ซึ่งเพื่อประโยชน์ของการอภิปราย: เราจะติดป้ายว่าเป็นmyField) ถ้าmyFieldเป็นประเภทที่เราสามารถทำได้เปรียบเทียบข้อมูลดังกล่าวกับสายเช่นเพื่อให้เป็น:NVARCHARmyField = 'foo' NTEXTแต่นี้ไม่ทำงานสำหรับเขตข้อมูลประเภท CAST(myField as NVARCHAR(MAX)) = 'foo'ดังนั้นเราจึงต้องทำเปรียบเทียบกับหล่อ: ประสงค์ในการทำงานความจริงเรื่องนี้ถ้าmyFieldเป็นประเภทหรือNVARCHARNTEXT อะไรคือผลงานยอดเยี่ยมของการทำนักแสดงดังกล่าวในสนามที่มีประเภทอยู่แล้วNVARCHAR ? ฉันหวังว่า SQL Server เป็นพอสมาร์ทที่จะรับรู้แบบไดนามิกที่myFieldมีอยู่แล้วจากประเภทNVARCHAR(ประสิทธิภาพการเปลี่ยนCASTเป็นไม่มี-op)

3
แปลงค่าตัวเลขสตริงด้วยเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยมเป็น NUMERIC (10, 2)
ฉันมีตาราง SQL ของคอลัมน์ varchar ซึ่งมีตัวเลขที่จัดรูปแบบกรีก (. เป็นตัวคั่นหลักพันและเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม) การแปลงแบบคลาสสิก CONVERT(numeric(10,2),REPLACE([value],',','.')) ไม่ทำงานเพราะ (ตัวคั่นหลักพัน) ฆ่าการแปลง เช่นลอง CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) ฉันต้องการแปลงค่าดังกล่าวเป็นตัวเลข (10,2) ข้อเสนอแนะใด ๆ ของวิธีการจัดการมันได้หรือไม่

2
ทำไมฉันถึงได้รับการแปลงโดยนัยของ Int / Smallint เป็น Varchar และมันส่งผลกระทบต่อการประเมิน Cardinality จริง ๆ หรือไม่
ฉันกำลังพยายามแก้ไขปัญหาแบบสอบถามที่ทำงานช้าโดยใช้ Show Plan Analysis (SSMS) บนแผนปฏิบัติการจริง เครื่องมือวิเคราะห์ชี้ให้เห็นว่าการประมาณการจำนวนแถวนั้นไม่ได้ผลการค้นหาที่ส่งคืนในบางสถานที่ในแผนและให้คำเตือนการแปลงโดยนัยเพิ่มเติม ฉันไม่เข้าใจการแปลงโดยนัยเหล่านี้ของ int ไปเป็น Varchar- เขตข้อมูลที่อ้างถึงไม่ได้เป็นส่วนหนึ่งของพารามิเตอร์ / ตัวกรองใด ๆ ในแบบสอบถามและในตารางทั้งหมดที่เกี่ยวข้องกับชนิดข้อมูลคอลัมน์จะเหมือนกัน: ฉันได้รับคำเตือนจาก Cardinality ด้านล่าง: การแปลงประเภทในนิพจน์ (CONVERT_IMPLICIT (varchar (12), [ccd]. [profileid], 0)) อาจส่งผลต่อ "CardinalityEstimate" ในตัวเลือกแผนแบบสอบถาม - ฟิลด์นี้เป็นจำนวนเต็มทุกที่ในฐานข้อมูลของฉัน การแปลงประเภทในนิพจน์ (CONVERT_IMPLICIT (varchar (6), [ccd]. [nodeid], 0)) อาจส่งผลต่อ "CardinalityEstimate" ในตัวเลือกแผนแบบสอบถาม - ฟิลด์นี้มีขนาดเล็กทุกที่ใน DB ของฉัน การแปลงประเภทในการแสดงออก (CONVERT_IMPLICIT (varchar (6), [ccd]. …

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 …

2
แปลงคอลัมน์วันที่และเวลาเป็นจำนวนวินาที
ในฐานข้อมูล SQL Server ของฉันฉันมีdatetimeคอลัมน์ เป็นวิธีที่ดีในการสร้างคอลัมน์ใหม่ที่แสดงlongค่าสำหรับdatetimeคอลัมน์อย่างไร longจะเป็นตัวแทนจำนวนวินาที ฉันคิดว่าถ้าฉันสามารถแปลงเป็นlongsมันจะทำให้ง่ายขึ้นในการจัดกลุ่มตามข้อความค้นหาในช่วงเวลาเนื่องจากฉันสามารถแบ่งจำนวนยาวด้วยจำนวนคงที่ได้ ตารางคงที่จะไม่อัปเดตหรือลบข้อมูล

3
การแปลงสตริงที่ไม่ใช่ Unicode เป็น Unicode สตริง SSIS
ฉันกำลังสร้างแพ็คเกจที่ฉันจะส่งออกข้อมูลจากฐานข้อมูลไปยังไฟล์ excel ที่ว่างเปล่า เมื่อฉันเพิ่มเฉพาะส่วนประกอบต้นทางและปลายทางและฉันเรียกใช้แพคเกจฉันได้รับข้อผิดพลาดในการแปลงที่ระบุคอลัมน์เอาท์พุทและคอลัมน์ "A" ไม่สามารถแปลงระหว่างชนิดข้อมูลสตริงของ unicode และ non-unicode ในการแก้ไขปัญหานี้ฉันได้เพิ่มส่วนประกอบการแปลงข้อมูลและแปลงคอลัมน์ทั้งหมดเป็น "Unicode String [DT_WSTR]" และฉันไม่ได้รับข้อผิดพลาดอีกต่อไป ปัญหาเดียวคือฉันมีประมาณ 50 คอลัมน์ที่ฉันต้องไป 1 ต่อ 1 และเลือก "Unicode String [DT_WSTR]" จากรายการแบบหล่นลง จากนั้นฉันต้องเข้าไปในองค์ประกอบปลายทางและแมปคอลัมน์ที่เพิ่งแปลงใหม่ไปยังไฟล์ excel ของฉัน คำถามของฉันคือถ้ามีคนเจอปัญหานี้จะมีวิธีที่มีประสิทธิภาพมากขึ้นในการหลีกเลี่ยงการแปลงประเภทข้อมูลด้วยตนเองทั้งหมดหรือไม่? ต้องแปลงและแมปคอลัมน์ทั้งหมดทีละรายการดูเหมือนจะไม่เป็นประโยชน์โดยเฉพาะถ้าคุณมีจำนวนแถวมาก ฉันเข้าใจว่าไฟล์ excel ไม่ใช่วิธีที่ดีที่สุดในการนำเข้าและส่งออกข้อมูล แต่เป็นสิ่งที่จำเป็นในกรณีนี้โดยเฉพาะ ฉันอาจมองหาวิธีที่จะส่งออกไปยังไฟล์ข้อความแบบแฟลตและลองแปลงเป็น excel เป็นขั้นตอนสุดท้ายในแพ็คเกจ ฉันกำลังกระโดดนี้จะไม่เรียกข้อผิดพลาดการแปลง unicode / nonunicode เดียวกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.