• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Furriel

[SQL2000] Verificar se uma variável tem caracteres sem ser numéricos

20 mensagens neste tópico

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 :thumbsup:

          Também dá erro se escrever caracteres do género [-:;]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, talvez o SQL Server 2000 não suporte isso. Eu testei no 2005.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Seria mais facil pores aqui o código que tens. Assim é complicado saber de onde vem esse erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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."

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz com expressões regulares !!  ve o manual de referencia do SQL Server ou procura no google

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SQL não tem expressões regulares por defeito. Só criando uma extensão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei o que são expressões regulares, vou ter que googlar :D 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 :P

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  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Furriel, convem sempre usar as pelicas quando queres atribuir algo a uma varchar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tool:

Tas a pressupor, desconheço qualquer extensão que a microsoft tenha introduzido em SQL 2000.

Em SQL 2005 já o tens.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei o que são expressões regulares, vou ter que googlar :D 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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora