String.IsNullOrEmpty类似于SQL中VARCHAR的函数?

时间:2011-07-28 17:29:39

标签: sql-server tsql

假设我有一个函数或存储过程,它接受几个VARCHAR参数。我已经厌倦了这样编写SQL来测试这些参数是否有值:

IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0
BEGIN
    -- do stuff
END

要做到这一点还有更好的方法。不存在吗?

10 个答案:

答案 0 :(得分:25)

您可以执行ISNULL(@SomeVarcharParam, '') <> '',也可以创建一个返回位的UDF:

create function dbo.IsNullOrEmpty(@x varchar(max)) returns bit as
BEGIN
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0
    RETURN 0
ELSE
    RETURN 1
END

使用IF NOT dbo.IsNullOrEmpty(@SomeVarcharParam) BEGIN ...

调用它

请记住,在调用UDF时,必须为其所有者添加前缀(此处为dbo。)

答案 1 :(得分:12)

IF COALESCE(@SomeVarcharParm, '') <> ''
BEGIN
   -- do stuff
END

答案 2 :(得分:5)

如果我在串联(在select语句中)连接或合并字符串,并且我想检查列是NULL还是Empty,我这样做:

ISNULL('starting to build string ' 
+ NULLIF(some_table..some_col_that_might_be_null_or_empty, '')
, 'string to append if the resulting concatenation is null')

表达式内部的NULLIF将强制该列为空,如果它为空,则外部ISNULL表达式可以依赖于一致的输入并做出相应的反应。

答案 3 :(得分:1)

这是我的功能&#34;扩展&#34; ISNULL并检查空。检查测试值是否为null,如果它不为null,则将其修剪,然后检查长度。

如果测试字符串不是Null或Empty,则返回测试字符串,否则返回第二个字符串。

CREATE FUNCTION [dbo].[ISNULLOREMPTY]
(   
    @value NVARCHAR(max),
    @return NVARCHAR(max)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN 

IF (@value IS NULL)
BEGIN
    RETURN @return
END
ELSE
BEGIN
    IF (LEN(LTRIM(@value)) = 0)
    BEGIN 
        RETURN @return
    END 
END

RETURN @value;
END
GO

答案 4 :(得分:1)

虽然他在技术上实施了IfNullOrWhiteSpace,但我还是赞成了Atron的答案。

以下是我IfNullOrEmpty()的实现:

IF EXISTS (SELECT * FROM sys .objects WHERE object_id = OBJECT_ID(N'[dbo].[IfNullOrEmpty]' ) and type in ( N'FN'))
    DROP FUNCTION dbo.IfNullOrEmpty
go

CREATE FUNCTION dbo.IfNullOrEmpty(@value varchar(max), @substitute varchar(max)) returns varchar(max) as
BEGIN
    IF @value IS NOT NULL AND LEN(@value) > 0
        RETURN @value
    RETURN @substitute  
END

答案 5 :(得分:0)

我意识到这是一个老问题,但这是我在MSSQL中使用的: LEN(ISNULL(@asdf, ''))>0

示例:

DECLARE @asdf varchar(10)
SET @asdf = NULL --You can change this value to test different outputs

BEGIN IF LEN(ISNULL(@asdf, '')) > 0
   PRINT @asdf
ELSE
   PRINT 'IS NullOrEmpty'
END

--You can use it inline like this:
PRINT CASE LEN(ISNULL(@asdf, '')) WHEN 0 THEN 'IS NullOrEmpty' ELSE @asdf END

我认为这比其他解决方案更简单,更直接,因为它确实检查字符串是否为null或长度为0。

答案 6 :(得分:0)

在调用LEN之前,您不需要检查null。你可以使用LEN(@SomeVarcharParm)&gt; 0.如果值为NULL,''或'',则返回false。这是因为NULL&gt; 0返回false。亲自看看:

for (int i = 0; i < regist.size(); i++) {
        regist[i].printFriendInfo();
    }

答案 7 :(得分:0)

您可以执行IF @SomeVarcharParam <> '',因为条件将评估为NULL,如果参数为null,则不会执行分支

答案 8 :(得分:0)

使用此功能(基于Derek's):

CREATE FUNCTION dbo.isNullOrEmpty(@x varchar(max)) RETURNS BIT AS
BEGIN
    IF @x IS NOT NULL AND LEN(@x) > 0
        RETURN 0

    RETURN 1
END

as

dbo.isNullOrEmpty(@someVar)

WHERE dbo.isNullOrEmpty(@someVar) = 1

在存储过程或查询中。

答案 9 :(得分:0)

请使用案例command.case结构为:

当条件然后“某个值”否则“某个其他值”结束的情况

一些例子:

declare @SomeVarcharParm as nvarchar(20)=''
declare @SomeVarcharParm2 as nvarchar(20)=''

--select 1 or 2
select case when @SomeVarcharParm is null or @SomeVarcharParm='' then 1 else 2 end


--if null or empty set 'empty' value else set @SomeVarcharParm value
select @SomeVarcharParm2=case when @SomeVarcharParm is null or @SomeVarcharParm='' then 'empty' else @SomeVarcharParm end


--use null or empty in update command
update tbl1
set field1=case when field1 is null or field1='' then @SomeVarcharParm2 else field1 end
where id=1