SQL Server Isnull ส่งคืน 1900-01-01 เมื่อเขตข้อมูลเป็นศูนย์


15

โค้ดต่อไปนี้จะคืนค่า 1900-01-01 เมื่อฟิลด์ DOB เป็นโมฆะ ฉันต้องการ (และคาดว่า) มันจะคืนค่าสตริงว่าง ('') แต่ไม่ใช่ ฉันจะดำเนินการเพื่อให้ได้ผลลัพธ์ที่ต้องการได้อย่างไร

isnull(convert(date,DOB,1),'')

5
คุณกำลังผสมประเภทข้อมูลมากเกินไป โดยเฉพาะอย่างยิ่งสิ่งที่คุณกำลังทำอยู่กับวันที่ไม่ว่าจะเป็นNULL SELECT CAST('' AS DATE)ประเภทข้อมูลคือDOBอะไร
Mark Sinkinson

1
มันเป็นชนิดข้อมูล varchar ว่าฉันกำลังแปลงไปเป็นวัน
ฆ Velez

5
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่มันก็คุ้มที่จะพูดถึงว่ามันดูเหมือนว่าคุณกำลังพยายามจัดรูปแบบข้อมูลใน SQL แทนที่จะปล่อยให้ชั้นแอปพลิเคชันทำเพื่อคุณ 99.9% ของเวลาที่คุณดีกว่าปล่อยให้แอปพลิเคชันเลเยอร์ทำการกำหนด
Erik

คำตอบ:


20

คุณไม่สามารถรับสตริงที่ว่างเปล่าเพราะคุณกลับมาประเภทค่าจากDATEISNULL

ต่อMSDN ,ISNULL

ส่งคืนชนิดเดียวกันกับ check_expression ถ้า NULL ตัวอักษรมีให้เป็น check_expression ส่งกลับประเภทข้อมูลของ replace_value ถ้า NULL ตามตัวอักษรถูกจัดเตรียมไว้เป็น check_expression และไม่มีการจัดเตรียม replace_value ให้ส่งคืน int

หากคุณกำลังตรวจสอบว่ามีค่าอยู่หรือไม่NULLก็ไม่จำเป็นต้องแปลงเป็นวันที่เว้นแต่ว่าคุณต้องการส่งคืนค่าวันที่ (ซึ่งคุณดูเหมือนจะไม่)

ให้ใช้:

SELECT ISNULL( DOB , '')

ซึ่งจะกลับมา

''

NULLถ้ามีค่าเป็น

NULLวันที่NULL(ไม่มีค่า) สตริงที่ว่างเปล่าในมืออื่น ๆ ที่ประเมิน0ซึ่งใน SQL Server 1900-01-01เป็นปริยายจำนวนเต็มแทนจำนวนวันตั้งแต่


-3

หากคุณต้องการส่งคืนค่า DOB เมื่อมีการเติมและลบค่า Null เมื่อไม่มี DOB ที่เติม คุณสามารถลองสิ่งนี้ได้ แต่ DOB จะเป็น varchar ไม่ใช่ประเภทวันที่

isnull(cast(cast(DOB as date)as varchar),'') as DOB   (SQL SERVER)

2
การVARCHARส่ง a DATEและa กลับไป a VARCHARไม่สมเหตุสมผล เมื่อคุณลบเรื่องไร้สาระนั้นออกคำตอบของคุณจะเหมือนกับคำตอบที่ยอมรับโดยมีการแสดงออกน้อยลง
Erik

ใช่ในสถานการณ์ของคุณจะไม่ทำให้รู้สึก แต่ในสถานการณ์ที่ผมใช้มันสำหรับผมเริ่มต้นด้วยและจำเป็นเท่านั้นในวันที่datetime YYYY-MM-DDดังนั้นโดยการคัดเลือกนักแสดงขณะที่dateฉันทิ้งเวลา จากนั้นจึงvarcharอนุญาตให้ใช้งานisnullฟังก์ชันนี้ได้ ดังนั้นฉันยังคงได้รับวันที่สำหรับบันทึกที่มีประชากรและลบค่า Null 1900-01-01 00:00:00.000มิฉะนั้นผมได้รับ
Elvis Candelaria

1
มันไม่ใช่สถานการณ์ของฉันมันเป็นสถานการณ์ของคำถาม ฉันเชื่อว่าเป็นเหตุผลที่คุณรวบรวมคะแนนลงมา คุณกำลังพยายามตอบคำถามอื่น
Erik

ใช่คุณถูก. ฉันอ่านผิดที่ ความผิดของฉัน.
Elvis Candelaria

-3

สิ่งนี้จะแปลงค่า NULL date เป็น space application layer (Excel) จัดการพื้นที่ได้ดี

ISNULL (CONVERT(varchar(50), w.TRANSACTIONDT, 120), '')  as wTRANSACTIONDT

-3

เพียงแค่สร้างมุมมอง

สร้างมุมมอง test_view
เป็น
กรณีที่เลือกเมื่อปี (DOB) <= 1900 จากนั้น null อื่น DOB สิ้นสุดเป็น DOB บางครั้ง id จากการทดสอบ

แล้วใช้แทนตารางต้นฉบับ: เลือก * จาก test_view


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