Skip to content

Instantly share code, notes, and snippets.

@billinkc
Created May 21, 2019 19:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save billinkc/0ecea3cc2a2558d2c2584f7b1ee9b97a to your computer and use it in GitHub Desktop.
Save billinkc/0ecea3cc2a2558d2c2584f7b1ee9b97a to your computer and use it in GitHub Desktop.
Find non-alphanumerics in sql
IF OBJECT_ID('tempdb..#Numbers') IS NOT NULL
BEGIN
DROP TABLE #Numbers;
END
IF OBJECT_ID('tempdb..#rush') IS NOT NULL
BEGIN
DROP TABLE #rush;
END
SELECT TOP 255
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Number
INTO
#Numbers
FROM
sys.all_columns AS AC;
CREATE TABLE #Rush
(
colid int IDENTITY(1,1)
, col1 varchar(2)
, col2 int
)
INSERT INTO
#Rush
(
col1
, col2
)
SELECT
CHAR(D.rn) AS Col1
, D.rn AS Col2
FROM
(
SELECT TOP 128
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
)D;
-- find the weird stuff
SELECT
*
FROM
#Rush AS R
CROSS APPLY
(
SELECT
SUBSTRING(R.col1, N.Number, 1) AS BadCharacter
, CASE
WHEN ASCII(SUBSTRING(R.col1, N.Number, 1)) <> 32
THEN CONCAT('_', RIGHT(CONVERT(char(4), CONVERT(varbinary(1), ASCII(SUBSTRING(R.col1, N.Number, 1))),1),2))
ELSE '_'
END AS ReplaceCharacter
, ASCII(SUBSTRING(R.col1, N.Number, 1)) AS AsciiValue
FROM
#Numbers AS N
WHERE
N.Number > 0 AND N.Number <= CONVERT(INT, LEN(R.col1))
AND
(
ASCII(SUBSTRING(R.col1, N.Number, 1)) = 32
OR LEN(SUBSTRING(R.col1, N.Number, 1)) = 0
OR SUBSTRING(R.col1, N.Number, 1) = ''
OR PATINDEX('%[^0-9A-Za-z_]%', SUBSTRING(R.col1, N.Number, 1) ) > 0
)
)WS
ORDER BY
1, WS.BadCharacter;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment