Furriel Posted January 18, 2007 at 01:04 PM Report Share #77064 Posted January 18, 2007 at 01:04 PM Olá, Quero fazer um If para verificar se uma variável é só numérica ou se tem algum caracter diferente de [0-9]. Não estou a conseguir fazer isso. Já fiz da forma IF(IsNumeric(@NUM)=1), mas assim funciona apenas de digitar letras, se colocar tipo as343 ou as-sd, já não dá. Sugestões? Obrigado. EDIT: Se colocar primeiro letras e depois algarismos ele funciona, mas se colocar primeiro algarismos e depois letras já dá erro 👍 Também dá erro se escrever caracteres do género [-:;] Link to comment Share on other sites More sharing options...
Asgorath Posted January 18, 2007 at 01:34 PM Report Share #77069 Posted January 18, 2007 at 01:34 PM Boas Usa o SubString para percorrer carácter a carácter. "The Dark Side Clouds Everthing. Impossible To See The Future Is."My rig: Intel Core 2 Quad Q9450 | abit IP35P | 4G Kingston 800 Mhz | XFX GeForce 9800 GX2 1G ddr3 | 2X WD5000AAJS 500Gb Sata 2 | PSU 600W || Caixa El-Diablo | Creative XMod Link to comment Share on other sites More sharing options...
Furriel Posted January 18, 2007 at 01:55 PM Author Report Share #77070 Posted January 18, 2007 at 01:55 PM Boas Usa o SubString para percorrer carácter a carácter. Olá, estive a ver como fazer com o SubString mas não estou a conseguir. Link to comment Share on other sites More sharing options...
Furriel Posted January 18, 2007 at 02:29 PM Author Report Share #77073 Posted January 18, 2007 at 02:29 PM Estive a fazer umas pesquisas e será que dá para usar @@ERROR ? Já estive a tentar mas não funcionou... CREATE PROCEDURE ...... IF (@@ERROR = 0) BEGIN ........... END ELSE PRINT '.......' Link to comment Share on other sites More sharing options...
Furriel Posted January 18, 2007 at 09:37 PM Author Report Share #77158 Posted January 18, 2007 at 09:37 PM Então pessoal, não há ideias? Link to comment Share on other sites More sharing options...
Tiago Salgado Posted January 19, 2007 at 08:12 PM Report Share #77331 Posted January 19, 2007 at 08:12 PM Tenta algo do genero... DECLARE @a AS VARCHAR(1000) SET @a = '134142141244214124' BEGIN TRY IF @a > CAST(0 as float) BEGIN Print 'É numerico' END END TRY BEGIN CATCH Print 'Não é numérico' END CATCH GO Cumps Link to comment Share on other sites More sharing options...
Furriel Posted January 19, 2007 at 11:41 PM Author Report Share #77364 Posted January 19, 2007 at 11:41 PM Não funciona, dá mensagem de erro:170 Incorrect syntax near 'TRY' Já tentei pesquisar como funciona essa instrução mas não encontrei nada. É mesmo usada em SQL2000? Link to comment Share on other sites More sharing options...
Tiago Salgado Posted January 20, 2007 at 01:34 AM Report Share #77387 Posted January 20, 2007 at 01:34 AM Pois, talvez o SQL Server 2000 não suporte isso. Eu testei no 2005. Link to comment Share on other sites More sharing options...
Furriel Posted January 20, 2007 at 03:44 PM Author Report Share #77447 Posted January 20, 2007 at 03:44 PM Já consegui verificar com usado o SUBSTRING e o CHARINDEX mas só funciona se introduzir letras. Se por exemplo introduzir estes caracteres no meio . - ou se começar com números e acabar com letras tipo: 123abc Dá erro...ERROR 170 Alguém pode ajudar? Link to comment Share on other sites More sharing options...
Tiago Salgado Posted January 20, 2007 at 05:07 PM Report Share #77463 Posted January 20, 2007 at 05:07 PM Seria mais facil pores aqui o código que tens. Assim é complicado saber de onde vem esse erro. Link to comment Share on other sites More sharing options...
Furriel Posted January 20, 2007 at 06:29 PM Author Report Share #77478 Posted January 20, 2007 at 06:29 PM Seria mais facil pores aqui o código que tens. Assim é complicado saber de onde vem esse erro. Aqui está: CREATE PROCEDURE TESTE @NUM VARCHAR (1000) AS DECLARE @a AS NVARCHAR (1000), @pos AS INTEGER, @n AS INTEGER, @i AS INTEGER, @texto AS NVARCHAR (1), @no AS INTEGER SET @a = '0123456789' SET @pos = 0 SET @n = DATALENGTH(@NUM) SET @i = 1 SET @no = 0 WHILE @i < @n + 1 BEGIN SET @texto = SUBSTRING( @NUM , @i , 1 ) SET @pos = CHARINDEX( @texto, @a ) IF @pos = 0 BEGIN SET @no = @no +1 END SET @i = @i +1 END IF ( @no > 0 ) BEGIN PRINT 'Só pode introduzir números.' END GO Link to comment Share on other sites More sharing options...
Furriel Posted January 22, 2007 at 09:56 PM Author Report Share #77888 Posted January 22, 2007 at 09:56 PM Não há ideias 😛 Link to comment Share on other sites More sharing options...
Tiago Salgado Posted January 23, 2007 at 07:48 PM Report Share #78133 Posted January 23, 2007 at 07:48 PM Eu testei o teu código e funcionou bem. Mostra aqui como tás a executar o procedimento para ver se aqui tb dá erro. Testei da seguinte forma: - exec TESTE '123' > nao deu erro - exec TESTE 'dsadasdads' > "Só pode introduzir números." - exec TESTE 'dsada111sdads' > "Só pode introduzir números." - exec TESTE 'ad12ddas´d+das0+dsad' > "Só pode introduzir números." Link to comment Share on other sites More sharing options...
Tool Posted January 23, 2007 at 07:55 PM Report Share #78135 Posted January 23, 2007 at 07:55 PM Faz com expressões regulares !! ve o manual de referencia do SQL Server ou procura no google Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt Link to comment Share on other sites More sharing options...
shumy Posted January 23, 2007 at 08:52 PM Report Share #78151 Posted January 23, 2007 at 08:52 PM SQL não tem expressões regulares por defeito. Só criando uma extensão. Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática! Link to comment Share on other sites More sharing options...
Tool Posted January 23, 2007 at 09:47 PM Report Share #78166 Posted January 23, 2007 at 09:47 PM Todos os SGBD adicionam extensões ao SQL Standard e de certeza que o SQL Server tb terá Regexp... o Mysql, Oracle,etc,têm! Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt Link to comment Share on other sites More sharing options...
Furriel Posted January 23, 2007 at 10:03 PM Author Report Share #78173 Posted January 23, 2007 at 10:03 PM Não sei o que são expressões regulares, vou ter que googlar 😄 Nunca tinha sequer ouvida a expressão. Tiago Salgado, eu estava a testar sem a plicas, com as plicas já não dá erros nenhuns 😛 Ele devia considerar outra variável, quando introduzia 123-123 ou escrevia 123abc Estou a ver que uma variável deve estar sempre entre plicas 🙂 EDIT: Encontrei esta página com expressões regulares,http://www.roccofroes.com/materia_descricao.asp?materia_codigo=181, mas não percebi nada do que é 😉 EDIT2: Este explica melhor, http://www.macoratti.net/net_regex.htm, já percebi o que são as expressões regulares, não estava a associar pelo nome ? Link to comment Share on other sites More sharing options...
Tiago Salgado Posted January 24, 2007 at 10:07 PM Report Share #78389 Posted January 24, 2007 at 10:07 PM Furriel, convem sempre usar as pelicas quando queres atribuir algo a uma varchar. Link to comment Share on other sites More sharing options...
shumy Posted January 24, 2007 at 11:35 PM Report Share #78410 Posted January 24, 2007 at 11:35 PM Tool: Tas a pressupor, desconheço qualquer extensão que a microsoft tenha introduzido em SQL 2000. Em SQL 2005 já o tens. Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática! Link to comment Share on other sites More sharing options...
Saco Posted January 25, 2007 at 11:40 AM Report Share #78465 Posted January 25, 2007 at 11:40 AM Não sei o que são expressões regulares, vou ter que googlar 😄 Nunca tinha sequer ouvida a expressão. Tiago Salgado, eu estava a testar sem a plicas, com as plicas já não dá erros nenhuns 😉 Ele devia considerar outra variável, quando introduzia 123-123 ou escrevia 123abc pois, 123-123 é 0 (o sql server faz a conta...), provavelmente o erro de sintaxe que tinhas era por estares a subtrair letras ou assim... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now