Подтвердить что ты не робот

String.IsNullOrEmpty как функция для VARCHAR в SQL?

Скажем, у меня есть функция или хранимая процедура, которая принимает несколько параметров VARCHAR. Я устал от написания SQL, как это, чтобы проверить, имеют ли эти параметры значение:

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

Там должен быть лучший способ сделать это. Не существует?

4b9b3361

Ответ 1

Вы можете сделать 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.)

Ответ 2

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

Ответ 3

Если я конкатенирую или объединяю строку inline (внутри оператора 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 во внутренней части выражения заставит столбец быть NULL, если он пуст, тогда внешнее выражение ISNULL может зависеть от последовательного ввода и соответственно реагировать.

Ответ 4

Вот моя функция, которая "расширяет" ISNULL и также проверяет наличие пустого. Значение теста проверяется на нуль, а если оно не равно null, оно обрезается, а затем проверяется на длину.

Функция возвращает тестовую строку, если она NOT 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

Ответ 5

Я понимаю, что это старый вопрос, но это то, что я использую в 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

Я думаю, что это проще и более прямолинейно, чем другие решения, потому что он буквально проверяет, является ли строка нулевой или имеет длину 0.

Ответ 6

Вам не нужно проверять значение null перед вызовом LEN. Вы можете просто использовать LEN (@SomeVarcharParm) > 0. Это вернет false, если значение равно NULL, '' или ''. Это связано с тем, что NULL > 0 возвращает false. Посмотрите для себя:

SELECT 
 CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
 CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
 CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
 CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
 CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END

Ответ 7

Вы можете просто сделать IF @SomeVarcharParam <> '', поскольку условие будет оцениваться до NULL, и ветка не будет принята, если параметр имеет значение null

Ответ 8

Я поддержал ответ Атрона, хотя он технически реализовал IfNullOrWhiteSpace.

Здесь моя реализация 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

Ответ 9

Используйте эту функцию (на основе 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

как

dbo.isNullOrEmpty(@someVar)

или

WHERE dbo.isNullOrEmpty(@someVar) = 1

в хранимой процедуре или запросе.