regulares regular regexp_like query expresiones ejemplo con sql sql-server regex expression

regexp_like - replace con expresiones regulares sql server



Expresiones regulares dentro de SQL Server (5)

el valor almacenado en DB es: 5XXXXXX [donde x puede ser cualquier dígito]

No menciona los tipos de datos: si son numéricos, es probable que tenga que usar CAST / CONVERT para cambiar el tipo de datos a [n] varchar.

Utilizar:

WHERE CHARINDEX(column, ''5'') = 1 AND CHARINDEX(column, ''.'') = 0 --to stop decimals if needed AND ISNUMERIC(column) = 1

Referencias:

También tengo diferentes casos como XXXX7XX, por ejemplo, por lo que tiene que ser genérico.

Utilizar:

WHERE PATINDEX(''%7%'', column) = 5 AND CHARINDEX(column, ''.'') = 0 --to stop decimals if needed AND ISNUMERIC(column) = 1

Referencias:

Soporte de Regex

SQL Server 2000+ admite expresiones regulares, pero el problema es que tiene que crear la función UDF en CLR antes de tener la capacidad. Hay numerosos artículos que proporcionan código de ejemplo si los busca en Google. Una vez que tengas eso en su lugar, puedes usar:

  • 5/d{6} para tu primer ejemplo
  • /d{4}7/d{2} para su segundo ejemplo

Para más información sobre expresiones regulares, recomiendo altamente este sitio web .

He almacenado valores en mi base de datos que parecen 5XXXXXX , donde X puede ser cualquier dígito. En otras palabras, debo hacer coincidir las cadenas de consulta SQL entrantes como 5349878 .

¿Alguien tiene una idea de cómo hacerlo?

Tengo casos diferentes como XXXX7XX por ejemplo, así que tiene que ser genérico. No me importa representar el patrón de una manera diferente dentro del SQL Server.

Estoy trabajando con c # en .NET.


Los comodines SQL son suficientes para este propósito. Siga este enlace: http://www.w3schools.com/SQL/sql_wildcards.asp

necesitas usar una consulta como esta:

select * from mytable where msisdn like ''%7%''

o

select * from mytable where msisdn like ''56655%''


Para hacer coincidir un dígito, puede usar [0-9]. Así que podría usar 5 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] y [0-9] [0-9] [0-9 ] [0-9] 7 [0-9] [0-9] [0-9]. Hago esto mucho por los códigos postales.


Prueba esto

select * from mytable where p1 not like ''%[^0-9]%'' and substring(p1,1,1)=''5''

Por supuesto, deberá ajustar el valor de la subcadena, pero el resto debería funcionar ...


Puedes escribir consultas como esta en SQL Server:

--each [0-9] matches a single digit, this would match 5xx SELECT * FROM YourTable WHERE SomeField LIKE ''5[0-9][0-9]''