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]''