En general, una fila de datos consistirá en una dirección de correo electrónico, números de teléfono, valores alfanuméricos/alfanuméricos, etc. Por lo general, las validaciones frontales están ahí para validar una dirección de correo electrónico/número de teléfono, etc. En este artículo, lo haremos vea cómo se puede validar usando expresiones regulares mientras escribe consultas SQL. Porque siempre es bueno pasar datos relevantes en el backend. Siempre que hay un error en los datos, la expresión regular lo valida rápidamente e informa al usuario si se trata de un éxito o de un fracaso.
Paso 1: Crear una base de datos
Consulta:
SELECT * FROM sys.databases WHERE name = 'GEEKSFORGEEKS' BEGIN CREATE DATABASE [GEEKSFORGEEKS] END
Paso 2: Cree la tabla «GeekAuthors» en la base de datos «GEEKSFORGEEKS»
Consulta:
use GEEKSFORGEEKS CREATE TABLE GeekAuthors ( ID INT IDENTITY NOT NULL PRIMARY KEY, AuthorName VARCHAR(255) NOT NULL, AuthorEmail VARCHAR(255) NOT NULL, Age INT, Skillsets VARCHAR(255), NumberOfPosts INT ); GO
Como AuthorEmail es una columna varchar, se ingresó una dirección de correo electrónico incorrectamente no válida en la tabla «GeekAuthors». Nuestra tarea es encontrar las filas que obtuvieron una dirección de correo electrónico no válida.
Paso 3: para lograr esto, pongamos datos de muestra en cada fila
INSERT INTO GeekAuthors (AuthorName,AuthorEmail,Age,Skillsets,NumberOfPosts) VALUES ('Rachel','rachel@gmail.com',25,'Java,Python,.Net',5); INSERT INTO GeekAuthors (AuthorName,AuthorEmail,Age,Skillsets,NumberOfPosts) VALUES ('Phoebe','phoebegmailcom',22,'Android,Python,.Net',15); INSERT INTO GeekAuthors (AuthorName,AuthorEmail,Age,Skillsets,NumberOfPosts) VALUES ('Monica','monica@gmailcom',23,'IOS,GO,R',10); INSERT INTO GeekAuthors (AuthorName,AuthorEmail,Age,Skillsets,NumberOfPosts) VALUES ('Joey','joey@.com',24,'Java,Python,GO',5); INSERT INTO GeekAuthors (AuthorName,AuthorEmail,Age,Skillsets,NumberOfPosts) VALUES ('Chandler','chandler@gmail',23,'IOS,GO,R',10); INSERT INTO GeekAuthors (AuthorName,AuthorEmail,Age,Skillsets,NumberOfPosts) VALUES ('Ross','ross@gmail.com',24,'Java,Python,GO',5);
Paso 4: Ahora validamos la dirección de correo electrónico.
Necesitamos validar si la dirección de correo electrónico ingresada es correcta o no. Para eso, podemos lograrlo fácilmente.
Consulta:
-- Get all email address SELECT AuthorEmail FROM GeekAuthors -- Get ValidEmail Address SELECT AuthorEmail AS ValidEmail FROM GeekAuthors WHERE AuthorEmail LIKE '%_@__%.__%' AND PATINDEX('%[^a-z,0-9,@,.,_,\-]%', AuthorEmail) = 0 GO -- use NOT condition in the WHERE clause and select all the invalid emails as well. SELECT AuthorEmail AS NotValidEmail FROM GeekAuthors WHERE NOT AuthorEmail LIKE '%_@__%.__%' AND PATINDEX('%[^a-z,0-9,@,.,_,\-]%', AuthorEmail) = 0 GO
Producción:
Paso 5: para ubicar el valor numérico del valor dado usando la expresión regular. Se puede averiguar usando dos formas.
Nuestra expresión de entrada puede consistir en valores alfanuméricos. Para averiguar la posición del valor numérico en los datos, podemos usar el siguiente formato.
Consulta:
--pattern to check is: Not of A-Z (both A-Z and a-z(search pattern)) -- in the input string and --finding the position of the non-matching pattern -- As we are checking numeric values, it checks for numeric value position --and it is displaying position of the character Way 1 : SELECT 'GeekPremierLeague2022' as ContestName, PATINDEX('%[^A-Za-z]%', 'GeekPremierLeague2022') as NumericCharacterPosition; Way 2 : SELECT 'GeekPremierLeague2022' as ContestName, PATINDEX('%[0-9]%', 'GeekPremierLeague2022') as NumericCharacterPosition;
Producción:
En caso de que el valor numérico no esté disponible, obtendremos 0 como respuesta
Producción:
Paso 6: en algunos escenarios, es posible que necesitemos extraer solo letras (az) de la string de entrada.
Puede ser posible combinando 2 funciones, a saber, PATINDEX y STUFF.
- Se debe aplicar una expresión regular en PATINDEX. Usando la consulta anterior obtendremos la posición numérica
- Usando la función STUFF, podemos reemplazar todos los valores numéricos.
Consulta:
-- At the 18th position, one character is replaced. We need to remove numeric value. -- Hence STUFF function is used 1st Param -- Input string 2nd Param -- Start location . As numeric is present at 18th location, here it is given 3rd Param -- Number of characters to be replaced 4th Param - Replacing value SELECT STUFF('GeekPremierLeague2022', 18, 1, '' ); -- One character is replaced at the index 18 -- If we want to remove all the numeric above SELECT STUFF('GeekPremierLeague2022', 18, 4, '' ); -- Four characters are replaced starting from the index 18
Producción:
Por lo tanto, al aplicar PATINDEX y STUFF, podemos eliminar el valor numérico en la string dada:
Consulta:
-- Below code will produce only alpha text only -- Scenario: A column is created in a table to accept only alphabets. As there is no direct way available, -- we can use this approach and extract the alphabets alone DECLARE @inputData NVARCHAR(MAX) = 'GEEKS PREMIER LEAGUE 2022' --input string DECLARE @intPosition INT --get the position of the integer from the input string SET @intPosition = PATINDEX('%[^A-Za-z]%', @inputData) -- We can use PATINDEX('%[0-9]%') also print @intPosition --run loop until no integer is found in the input string WHILE @intPosition > 0 BEGIN --remove the integer from that position SET @inputData = STUFF(@inputData, @intPosition, 1, '' ) --PRINT @inputData SET @intPosition = PATINDEX('%[^A-Za-z]%', @inputData ) --Again get the position of the next integer in the input string --PRINT @intPosition END SELECT 'GEEKS PREMIER LEAGUE 2022' as InputString, @inputData AS AlphabetsOnly
Producción:
Paso 7: para obtener solo los valores numéricos, suponga que cuando se produce la fuente de datos que consiste en el nombre del empleado, el número de teléfono, la dirección y la identificación del correo electrónico, podemos usar el siguiente enfoque para recuperar el número de teléfono (es decir, valor numérico) en la siguiente camino.
Consulta:
DECLARE @inputString VARCHAR(MAX) DECLARE @validchars VARCHAR(MAX) SET @inputString = 'GeekAuthor1 123456789 Address1 geek@gmail.com' --We are going to take continuous set of numbers and it should not have any spaces also in between SET @validchars = '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' DECLARE @idx INT SET @idx = PATINDEX('%'+ @validchars +'%',@inputString ) IF @idx > 0 AND (@idx = LEN(@inputString )-8 OR PATINDEX(SUBSTRING(@inputString ,@idx+9,1),'[0-9]')=0) SET @inputString =SUBSTRING(@inputString, PATINDEX('%'+ @validchars +'%',@inputString ), 9) ELSE SET @inputString = '' SELECT @inputString as NumericAlone
Por lo tanto, las expresiones regulares se utilizan en muchos lugares para validar un correo electrónico, una dirección, validar alfa solo o validar numérico solo.
Publicación traducida automáticamente
Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA