Avatar billede omansf Nybegynder
29. september 2006 - 12:41 Der er 8 kommentarer og
1 løsning

Trim af speciel karakter

Jeg har et tekstfelt med indholdet 000123456789

Jeg vil gerne trimme 000 væk i en stored procedure.

Der er også rækker uden 000 så bare substringe sig ud af det er ikke nok.

Kan det lade sig gøre?
Avatar billede lorentsnv Nybegynder
29. september 2006 - 12:51 #1
Følgende vil konvertere din string først til integer, og så tilbage til string:

cast(cast(strTekst as int) as varchar(20))
Avatar billede omansf Nybegynder
29. september 2006 - 12:56 #2
Ja ok den har jeg også tænkt på - men jeg kan ikke garantere at der ikke kan snige sig bogstaver ind. Der er tale om magnetstribe kort.
Avatar billede lorentsnv Nybegynder
29. september 2006 - 15:58 #3
I så fald bliver du måske nødt til at løbe igennem og finde første tegn som har en ascii værdi melelm 49 og 57. Når du kender første position for et tal mellem 1 og 9, kan du vel hente reste.
Avatar billede lorentsnv Nybegynder
29. september 2006 - 16:09 #4
Nedenstående bør løse dit problem:

DECLARE @position int, @string char(15), @length as int
SET @position = 1
SET @string = '00H01234587'
Set @length = len(@string)

WHILE @position <= @length
  BEGIN
      IF ASCII(SUBSTRING(@string, @position, 1)) BETWEEN 49 and 57
        BREAK
        ELSE SET @position = @position + 1
  END

SELECT SUBSTRING(@string, @position, @length - @position)
DECLARE @position int, @string char(15), @length as int
-- Initialize the variables.
SET @position = 1
SET @string = '00H01234587'
Set @length = len(@string)

WHILE @position <= @length
  BEGIN
      IF ASCII(SUBSTRING(@string, @position, 1)) BETWEEN 49 and 57
        BREAK
        ELSE SET @position = @position + 1
  END

SELECT SUBSTRING(@string, @position, @length - @position)
Avatar billede lorentsnv Nybegynder
29. september 2006 - 16:10 #5
Unskyld, SQL'en kom dobbelt:


DECLARE @position int, @string char(15), @length as int
SET @position = 1
SET @string = '00H01234587'
Set @length = len(@string)

WHILE @position <= @length
  BEGIN
      IF ASCII(SUBSTRING(@string, @position, 1)) BETWEEN 49 and 57
        BREAK
        ELSE SET @position = @position + 1
  END

SELECT SUBSTRING(@string, @position, @length - @position)
Avatar billede lorentsnv Nybegynder
29. september 2006 - 16:17 #6
UBS, fik ikke med sidste tal. Skulle nu være rettet.

DECLARE @position int, @string char(15), @length as int
SET @position = 1
SET @string = '00H01234587'
Set @length = len(@string)

WHILE @position <= @length
  BEGIN
      IF ASCII(SUBSTRING(@string, @position, 1)) BETWEEN 49 and 57
        BREAK
        ELSE SET @position = @position + 1
  END

SELECT SUBSTRING(@string, @position, @length + 1 - @position)
Avatar billede omansf Nybegynder
29. september 2006 - 16:58 #7
Fand
Avatar billede omansf Nybegynder
29. september 2006 - 16:58 #8
Fantastisk!
Avatar billede lorentsnv Nybegynder
30. august 2007 - 09:49 #9
Måske på tide at lukke spørgsmålet ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester