我正在使用 SQL Server 2005。我有一个带有文本列的表,表中有很多行,其中该列的值不为空,但它是空的。尝试与 '' 进行比较会产生以下响应:

数据类型 text 和 varchar 在不等于运算符中不兼容。

有没有特殊的函数来确定文本列的值是否不为空而是为空?

有帮助吗?

解决方案

where datalength(mytextfield)=0

其他提示

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

实际上,您只需使用 LIKE 运算符即可。

SELECT * FROM mytable WHERE mytextfield LIKE ''

仅获取空值(而不是空值):

SELECT * FROM myTable WHERE myColumn = ''

要获取 null 值和空值:

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

仅获取空值:

SELECT * FROM myTable WHERE myColumn IS NULL

要获取除 null 和空之外的值:

SELECT * FROM myTable WHERE myColumn <> ''


请记住,仅在必要时才使用 LIKE 短语,因为与其他类型的搜索相比,它们会降低性能。

我知道这篇文章很古老,但是我发现它很有用。

它没有解决我返回带有非空文本字段的记录的问题,所以我想我会添加我的解决方案。

这是对我有用的 where 子句。

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

使用 数据长度 方法,例如:

SELECT length = DATALENGTH(myField)
FROM myTABLE

我会测试 子串(文本列, 0, 1)

null 和空字符串等价吗?如果是的话,我会在我的应用程序中包含逻辑(或者如果应用程序是“开箱即用的”,则可能是一个触发器?)以强制该字段为 null 或 '',但不是另一个。如果您使用 '',那么您也可以将该列设置为 NOT NULL。只是数据清洁度的问题。

如果该值为 null 或为空,我希望显示一个预定义的文本(“没有可用的实验室”),我的朋友帮我解决了这个问题:

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

你必须同时做这两件事:

SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''

使用 IS NULL 运算符:

Select * from tb_Employee where ename is null

我知道这个问题有很多替代方案的答案,但我只是想将 @Eric Z Beard 和 @Tim Cooper 以及 @Enrique Garcia 和 @Uli Köhler 找到的最佳解决方案放在一起。

如果需要处理以下事实,则在您的用例场景中,仅空格可能与空相同,因为下面的查询将返回 1,而不是 0。

SELECT datalength(' ')

因此,我会选择类似的东西:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

尝试这个:

select * from mytable where convert(varchar, mycolumn) = ''

我希望能帮助你!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top