![]() |
|
|
| Subject:
SQL Server query
Category: Computers > Programming Asked by: b3jz-ga List Price: $20.00 |
Posted:
26 Jan 2006 12:26 PST
Expires: 25 Feb 2006 12:26 PST Question ID: 438014 |
SQL statement (MS SQL Server) that retrieves all rows (using one column) that do not consist of only a-z, A-Z or 0-9. SO would not return a row that had 'sdfjnjd7733NNNND' but would return 'sdcsnjn-77N' for example |
|
| There is no answer at this time. |
|
| Subject:
Re: SQL Server query
From: andyclap-ga on 26 Jan 2006 15:20 PST |
Presuming you're working with normal ascii data, the easiest way to do
this is to check the field being "not like" any of the disallowed
characters.
Unfortunately the like expression doesn't allow ranges by character
code, but you can use the char() function to get a particular
character, and it seems to work OK for ranges.
For normal ascii data, the ranges to exclude are space to the
character before 0, the character after 9 to the character before A,
the character after Z to the character before a, then the character
after z to the end of the characters.
so...
select *
from MyTable
where MyField not like
'%[ -' + char(ascii('0')-1)
+ char(ascii('9')+1) + '-' + char(ascii('A')-1)
+ char(ascii('Z')+1) + '-' + char(127) + ']%' |
| Subject:
Re: SQL Server query
From: mathtalk-ga on 30 Jan 2006 18:40 PST |
I see this as being a simple 'like' query using wildcards and a not (^) operator applied to a range. Let's suppose that the table is myTable and has a varchar filed called myField. The query I have in mind would be: select * from myTable where myField like '%[^a-zA-Z0-9]%' In other words the query requires that somewhere in column myField, there's a character _other than_ an alphanumeric character. regards, mathtalk-ga |
| Subject:
Re: SQL Server query
From: digichaos-ga on 03 Feb 2006 10:09 PST |
Maybe the best approach would be to look at it from the other way
around. Instead of looking at the a-z, A-Z, and 0-9 you should find
all items that contain the other characters you want.
Either way, here is a SQL function you can add to your database and an
example of how you can call it to return back data.
You can copy and paste this into SQL Query Analyzer and run it to put
this function into your database:
--- START PASTE
CREATE FUNCTION
dbo.find_regex
(
@regex varchar(255),
@fieldname varchar(8000)
)
RETURNS int
AS
BEGIN
declare @obj int
declare @res int
declare @match bit
set @match=0
exec @res=sp_OACreate 'VBScript.RegExp',@obj OUT
IF (@res <> 0)
BEGIN
RETURN NULL
END
exec @res=sp_OASetProperty @obj, 'Pattern', @regex
IF (@res <> 0)
BEGIN
RETURN NULL
END
exec @res=sp_OASetProperty @obj, 'IgnoreCase', 1
IF (@res <> 0)
BEGIN
RETURN NULL
END
exec @res=sp_OAMethod @obj, 'Test',@match OUT, @fieldname
IF (@res <> 0)
BEGIN
RETURN NULL
END
exec @res=sp_OADestroy @obj
return @match
END
GO
--- END PASTE
Then to use this query to get back all the rows that contain
~!@#$%^&*()_+-= in a field called "Name":
SELECT * FROM tbl_Site WHERE dbo.find_regex('\b[~!@#$%^&*()_+\-=]',Name) <> 0 |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
| Search Google Answers for |
| Google Home - Answers FAQ - Terms of Service - Privacy Policy |