2012-05-13 10 views
7

Quiero una expresión de patrón SQL para hacer coincidir todos los números entre y .Patrón MSSQL para unir todos los números entre [1-999]

EDIT:

En MSSQL.

+0

No todos los DBM siguen el mismo estándar en cuanto a patrones y búsquedas con comodines. Debes ser específico. Inicialmente, su pregunta tampoco tenía las etiquetas correctas. – Hameed

Respuesta

10

Al usar el operador LIKE coincidencia de patrones en SQL para una clase de caracteres, no hay comodín que se repita la clase de caracteres como si hubiera en regex. En otras palabras, no se puede hacer cosas como [0-9]+ o [0-9]{1,3} (ambos también capturarían 0)

Por lo tanto, usted tiene que cero-pad el número antes de poder compararlo.

No es directamente un patrón , pero esto expresión basa en parte en el operador LIKE y trabajará para los enteros positivos entre 1 y 999:

RIGHT('00' + myfield, 3) LIKE '[0-9][0-9][0-9]' 
AND RIGHT('00' + myfield, 3) <> '000' 
AND LEN(myfield) <= 3 

Editar: suposición hizo que eres hablando de Microsoft SQL Server, ya que no especificó.

+0

¿En qué DBMS 'LIKE' [0-9] [0-9] [0-9] '' funcionará? Seguro que no es un comodín SQL 'LIKE' estándar (SQL estándar solo entiende comodines'% 'y' _', no "rangos") –

+0

Aunque no todos, salvo algunos, admiten expresiones regulares en gran medida. En MySQL podría escribir 'WHERE num REGEXP '^ [1-9] [0-9] {1,2} $' – Hameed

+0

@Hameed: Entiendo eso, pero su ejemplo no usó el operador' LIKE'. –

5
SELECT * FROM table WHERE field BETWEEN 1 AND 999; 

EDIT:Esto funcionará sólo en PostgreSQL.

Si usted está buscando un patrón de expresión regular para que coincida con cuerdas, entonces algo como esto:

SELECT * FROM table WHERE field ~ '[1-9][0-9]{1,2}'; 

Salida documentación sobre regexp patterns.

SQL Server no admite las expresiones regulares as-is.
Puede usar la siguiente workaround o esta pregunta: Regular Expressions in SQL Server servers?.

+0

¡Quiero el patrón Sql! – ARZ

+1

@ARZ, es decir SQL, tendrá que ser * mucho * más específico. – huon

Cuestiones relacionadas