ฉันจะตรวจสอบได้อย่างไรว่าคอลัมน์ข้อความ SQL Server ว่างเปล่า


183

ฉันใช้ SQL Server 2005 ฉันมีตารางที่มีคอลัมน์ข้อความและฉันมีหลายแถวในตารางที่ค่าของคอลัมน์นี้ไม่เป็นโมฆะ แต่มันว่างเปล่า การพยายามเปรียบเทียบกับ '' ให้ผลการตอบสนองนี้:

ข้อความชนิดข้อมูลและ varchar ไม่เข้ากันในตัวดำเนินการไม่เท่ากับ

มีฟังก์ชั่นพิเศษเพื่อพิจารณาว่าค่าของคอลัมน์ข้อความไม่ว่างเปล่าหรือเปล่า?


1
ฉันจะแปลงชนิดข้อมูลถ้าเป็นไปได้เพื่อ varchar (สูงสุด) ข้อความได้รับการคัดค้าน - ดีที่สุดที่จะเริ่มทำการเปลี่ยนแปลงในขณะนี้หากคุณสัมผัสตาราง ตรวจสอบกับ dba ของคุณแน่นอน แต่สิ่งที่สามารถกลับใจได้มากขึ้นก่อนที่พวกเขาจะต้องกลับใจใหม่ความคิดของฉันก็ดีกว่า มันจะขึ้นอยู่กับจำนวนโค้ดที่คุณใช้ในสิ่งต่าง ๆ อย่างเช่นมีและเขียนข้อความซึ่งจะถูกทำลายว่าจะทำเช่นนี้ตอนนี้หรือไม่ แต่ฉันนำมันมาใช้
HLGEM

คำตอบ:


304
where datalength(mytextfield)=0

2
นี่ไม่ใช่คำถามจริง แต่เป็นเพียงคำพูดสำหรับคนที่อ่านชื่อเท่านั้นอย่าลืมเพิ่มOR mytextfield IS NULLเมื่อคอลัมน์ของคุณสามารถเป็นNULL
Daan

2
mytextfield IS NULL *OR*:-)
ban-geoengineering

3
@ ban-geoengineering SQL Server T-SQL ไม่ได้ให้เกียรติกับเทคนิคการประเมินการลัดวงจรดังนั้นการสั่งซื้อที่นี่จะไม่มีผลต่อผลลัพธ์
Conrad

47
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1

แบบสอบถามด้านบนจะจัดการกับความว่างเปล่าและธรรมชาติของคอลัมน์ข้อความและกำหนดค่าตามเงื่อนไข โหวตขึ้นคำตอบเนื่องจากนี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ
user_v

28

ที่จริงแล้วคุณแค่ต้องใช้ตัวดำเนินการ LIKE

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1 ฉันชอบคำตอบนี้มากกว่าคำตอบอื่น ๆ ที่นี่เพราะไม่พึ่งพาค่าใช้จ่ายเพิ่มเติมของการเรียกฟังก์ชัน SQL เช่น DataLength (), IsNull () หรือ Cast () บางทีแผนการสืบค้นที่สร้างขึ้นอาจเหมือนกัน (ฉันไม่ได้ตรวจสอบ); ยังคงฉันพบนี้จะเป็นไกลวิธีการทำความสะอาด
MikeTeeVee

5

ในการรับค่าว่างเปล่าเท่านั้น (และไม่ใช่ค่า Null):

SELECT * FROM myTable WHERE myColumn = ''

ในการรับค่า Null และค่าว่างให้ทำดังนี้

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''

ในการรับค่า Null เท่านั้น:

SELECT * FROM myTable WHERE myColumn IS NULL

ในการรับค่าอื่นที่ไม่ใช่ null และว่างเปล่า:

SELECT * FROM myTable WHERE myColumn <> ''


และจำไว้ว่าใช้วลี LIKE เมื่อจำเป็นเท่านั้นเพราะจะลดประสิทธิภาพเมื่อเปรียบเทียบกับการค้นหาประเภทอื่น


คุณไม่หมายถึงmyColumn IS NOT NULL AND my column = '';เหรอ
bcsb1001

2

ใช้ตัวดำเนินการ IS NULL:

Select * from tb_Employee where ename is null

1
atoumey กล่าวถึงในคำถามว่า "ค่าของคอลัมน์นี้ไม่เป็นโมฆะ แต่ว่างเปล่า" ดังนั้น ISNULL () จะไม่ทำงาน :)
GazB

2
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

1
upvoted แต่ ... โดยที่ ISNULL (TRIM (Field), '') = '' จะดีกว่า ;-) ถ้าคุณรู้สึกว่า "" เป็นสตริงว่างแม้ว่าจะมีช่องว่างอยู่ด้วย
Kirsten

สำหรับ MySQL รูปแบบที่ถูกต้องคือ:SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Cláudio Silva

1

ฉันรู้ว่าโพสต์นี้โบราณ แต่ฉันพบว่ามีประโยชน์

ไม่สามารถแก้ไขปัญหาการส่งคืนระเบียนด้วยเขตข้อมูลข้อความว่างเปล่าดังนั้นฉันคิดว่าฉันจะเพิ่มโซลูชันของฉัน

นี่คือข้อที่เหมาะกับฉัน

WHERE xyz LIKE CAST('% %' as text)



0

เป็นโมฆะและสตริงที่ว่างเปล่าเทียบเท่า? หากเป็นเช่นนั้นฉันจะรวมตรรกะไว้ในแอปพลิเคชันของฉัน (หรืออาจเป็นทริกเกอร์หากแอปนั้น "อยู่นอกกรอบ"?) เพื่อบังคับให้ฟิลด์เป็นโมฆะหรือ '' แต่ไม่ใช่แอปอื่น หากคุณใช้ '' คุณก็สามารถตั้งค่าคอลัมน์เป็นไม่ได้เช่นกัน เป็นเพียงข้อมูลที่สะอาด


0

ฉันต้องการให้มีข้อความที่กำหนดไว้ล่วงหน้า ("ไม่มีห้องทดลองว่าง") ให้แสดงหากค่านั้นว่างเปล่าหรือว่างเปล่าและเพื่อนของฉันช่วยฉันด้วย:

StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0)
                            THEN cast((S.UnitsOrdered) as varchar(50))
                    ELSE 'No Labs Available'
                    END

ว้าวแบบสอบถามย่อย นั่นไม่แพงเลย
Jay Croghan


0

ฉันรู้ว่ามีคำตอบมากมายสำหรับทางเลือกสำหรับปัญหานี้ แต่ฉันต้องการรวบรวมสิ่งที่ฉันพบว่าเป็นทางออกที่ดีที่สุดโดย @Eric Z Beard & @Tim Cooper กับ @Enrique Garcia & @Uli Köhler

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

SELECT datalength(' ')

ดังนั้นฉันจะไปเพื่อสิ่งที่ชอบ:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))


0

แทนที่จะใช้การisnullใช้ a caseเนื่องจากประสิทธิภาพดีกว่าตัวเคส

case when campo is null then '' else campo end

ในปัญหาของคุณคุณต้องทำสิ่งนี้:

case when campo is null then '' else
  case when len(campo) = 0 then '' else campo en
end

รหัสเช่นนี้:

create table #tabla(
id int,
campo varchar(10)
)

insert into #tabla
values(1,null)

insert into #tabla
values(2,'')

insert into #tabla
values(3,null)

insert into #tabla
values(4,'dato4')

insert into #tabla
values(5,'dato5')

select id, case when campo is null then 'DATA NULL' else
  case when len(campo) = 0 then 'DATA EMPTY' else campo end
end
from #tabla

drop table #tabla

คุณตรวจสอบก่อนว่าว่างหรือไม่จากนั้นคุณใช้ฟังก์ชั่น len ... ฉันหวังว่ามันจะช่วยได้
Enrique Garcia

เกิดอะไรขึ้นถ้าคอลัมน์ไม่ว่างเปล่าและไม่มีข้อความ?
Sayed Muhammad Idrees

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