quote marks in patindex

Ok gurus,

I have a string that may or may not has a space in it. If it DOES have a space, it needs to be wrapped in quotes, IE:
he lp needs to be "he lp"
now if I do
PATINDEX('%" "%','he lp')

Open in new window

 I get 0 as expected, but I need this to be 3 as it isn't wrapped in quotes. When I do
PATINDEX('%" "%','"he lp"')

Open in new window

it still returns 0
Ideas?
steamngnAsked:
Who is Participating?
 
Surendra NathTechnology LeadCommented:
in this case patindex will not help you entirely, there are two sure shot ways  to identify this pattern.

1) using recursive CTE
2) Using while loop

Internally SQL Server uses almost similar paln for both of them, I am using the while loop in order to get this done
you can convert the below code into a sql function in order to use it in your code....

declare @s varchar(1) -- special charecter
set @s = ' ' 
declare @input varchar(100) -- input to the function
set @input = 'flyi"ng mo"nkey'
declare @scPosition INT -- special charecter position
set @scPosition = 0
declare @Result	VARCHAR(10)
set @Result = 'False'
declare @dqPosition1 int,@dqPosition2 int
set @dqPosition1 = 0
set @dqPosition2 = 0
while (CHARINDEX(@s,@input,@scPosition+1) <> 0)
BEGIN
	SET @scPosition = CHARINDEX(@s,@input,@scPosition+1)
	SET @Result = 'False'
	WHILE (CHARINDEX('"',@input,@dqPosition1+1) <> 0)
	BEGIN
		SET @dqPosition1 = CHARINDEX('"',@input,@dqPosition1+1)
		SET @dqPosition2 = CHARINDEX('"',@input,@dqPosition1+2)
		SELECT @Result = 'TRUE' WHERE @scPosition BETWEEN @dqPosition1 AND @dqPosition2
		SELECT @dqPosition1 = CASE @dqPosition2 WHEN 0 THEN @dqPosition1 ELSE @dqPosition2 END
	END
END
SELECT @Result

Open in new window

0
 
Surendra NathTechnology LeadCommented:
are you looking for the position of a space, then you need not put those quote around..

you can do something like this

select PATINDEX('% %','he lp')

Open in new window


returns you three
the other one
select PATINDEX('% %','"he lp"')

Open in new window


returns you 4 as it is couning " now.
0
 
lcohanDatabase AnalystCommented:
try this:

select PATINDEX('% %','he lp')

don't put the string to search or patern between any quotes when in %%...
0
 
steamngnAuthor Commented:
Ok guys,
After re-reading this, I think I confused everyone... Sorry. What I need to do is this:
I have a varchar column of data, and in that column are strings that may or may not have special characters such as a space or backslash:
DATA
---------
horse
flying monkey
"flying squirrel"
pol"ar be"ar

Open in new window

Now with the above, I need to check if the special character exists, and if it DOES then the character(s) must also be wrapped in double quotes. So in the example above:
DATA
---------
horse              /*returns good, no special characters*/
flying monkey      /*fails, has space and not wrapped in quotes*/
"flying squirrel"  /*returns good, has space and is wrapped in quotes*/
pol"ar be"ar       /*also returns good, has space and is wrapped in quotes*/

Open in new window

So what I need to do is really two parts; first check to see if the special characters exist, and then if they do check to see that there are quotes on either side of these characters. Perhaps PATINDEX to look for the characters, and then CHARINDEX to get a position for each quote mark?
0
 
steamngnAuthor Commented:
Yup,
I was sliding in this direction as I was fiddling with it, but you beat me to it so kudos, points and all the bragging rights that go with it! :)
This is actually part of an RFC 5322 email validation function; there are other while loops needed anyway, so your solution fit nicely.
Andy
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.