2012-02-29 39 views
0

我想找到字符串NULLNULL包围任何字符,除非下一个字母是OA(即NULLONULLA都可以)。我想出了下面这么远,但它并不完全做我想做的:如何在字符串中找到字符串'NULL'?

DECLARE @VAR VARCHAR(255) 
SET @VAR = 'NULL' 
SELECT @VAR WHERE @VAR LIKE '%NULL[^OA]' 
+0

请显示您所需的输入和输出? – Vikram 2012-02-29 10:06:08

回答

4

我会去:

REPLACE(REPLACE(@VAR,'NULLA',''),'NULLO','') LIKE '%NULL%' 
+0

不错+1 *(还有6个去...)* – 2012-02-29 10:13:01

+0

但是如果你有NULLOXXX,它会返回XXX。这是预期的吗? – Diego 2012-02-29 10:22:34

+0

@Diego:'LIKE'表达式不返回一个字符串,它是一个测试,因此它返回一个SQL布尔值(true,false或null)。在这里''xxx''''''''''''将返回false,这是OP期望的IMO。 – Benoit 2012-02-29 10:26:23

1

喜欢的东西:

DECLARE @VAR VARCHAR(255) 
SET @VAR = 'NULL' 
SELECT @VAR WHERE @VAR LIKE '%NULL%' 
AND @VAR NOT LIKE '%NULL0%' 
AND @VAR NOT LIKE '%NULLA%' 
+1

是的,但这会失败,并且'HELLO NULL NULLA FOO'。 – Benoit 2012-02-29 10:07:16

0

您可以使用CHARINDEX

SELECT @VAR WHERE CHARINDEX(@VAR , 'NULL') > 0 

OR

SELECT @VAR WHERE CHARINDEX('NULL' , @VAR) > 0 
1

这似乎已经完成了招对我来说: SELECT * FROM nulls_table其中null_field不喜欢 'NULL [OA]%'

我使用这些值创建一个表:

ANULL 
ONULL 
NULLA 
NULLO 
ANULLA 
NULL 
NULLOXXX 

,并选择返回

ANULL 
ONULL 
ANULLA 
NULL 

它消除法无,NULLO和NULLOXXX这似乎是OP想要的 (找到字符串NULL或NULL包围任何字符,除非下一个字母是O或A)