J'ai besoin de searchr des lignes à partir d'une table où l'une des colonnes correspond à une string dont la caractéristique de définition est une string alphanumérique de longueur spécifique (disons 4) suivie d'un ":" suivi d'un entier.
J'ai essayé ce qui suit
select * from mytable where col1 like '[]{4}:%' select * from mytable where col1 like '.{4}:%'
et aucun de ces travaux. Je suis conscient que je n'ai même pas essayé de faire en sorte que la pièce qui suit le ":" soit un integer.
Vous pouvez utiliser une combinaison de charindex
, subssortingng
et isnumeric
CREATE TABLE MyTable ( col1 varchar(20), col2 varchar(50) ) INSERT INTO MyTable VALUES ('ABCD:123', 'Value 123'), ('1234:1234', 'Value 1234'), ('xyz:1234', 'should not be selected'), ('cdef:abcd', 'should not be selected too') SELECT * FROM MyTable WHERE CHARINDEX(':', col1, 0) = 5 AND ISNUMERIC(SUBSTRING(col1, CHARINDEX(':', col1) + 1, 20)) = 1
SQL Server ne prend pas directement en charge les expressions régulières (si vous effectuez une search, vous pouvez probablement find des didacticiels pour les append via des fonctions définies par l'user).
LIKE
ne prend pas en charge les quantificateurs, mais il comporte des caractères generics et des classs de caractères légères.
Un soulignement correspondra à n'importe quel caractère:
SELECT col1 FROM data WHERE col1 LIKE '____:%';
Ou vous pouvez spécifier une plage de caractères à associer:
SELECT col1 FROM data WHERE col1 LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%';
Voir ces live sur SQLFiddle .
Pour spécifier que la seconde partie doit être composée uniquement de numbers, une condition supplémentaire pourrait être utilisée:
SELECT col1 FROM data WHERE col1 LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%' AND col1 NOT LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%[^0-9]%';
Vous pouvez également tester le dernier live .
C'est moche, mais cela devrait résoudre votre problème pour les entiers positifs:
;WITH test AS ( SELECT expr = '1234:3421' UNION ALL SELECT '1234:25' UNION ALL SELECT '1234:xx') select * from test where expr like '%:[0-9]' OR expr like '%:[0-9][0-9]' OR expr like '%:[0-9][0-9]' OR expr like '%:[0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'