/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MSSQL] Pre-fixing af '0'er
Fra : Jesper Stocholm


Dato : 23-04-04 07:17

Jeg har en tabel med en række i med nogle tal. Disse tal kunne fx være

960401
991000
24565
342
5343

Når jeg trækker dem ud, skal der prefixes nuller foran tallene, så
resultatet bliver

960401
991000
024565
000342
005343

Men hvordan gør jeg nemmest det i SQL? Jeg kunne naturligvis ændre det i
selve applikationslaget, men da det består af noget kode, som jeg har lavet
for rigtig lang tid siden, er jeg ikke så interesseret i at skulle rette i
den.

Er det noget, der overhovedet vil give mening at lave i SQL - eller skal
jeg bide i det sure æble og lave applikationskoden om?



--
Jesper Stocholm http://stocholm.dk

Programmer's code comment:
//It probably makes more sense when you're stoned.

 
 
Kim Andersen (23-04-2004)
Kommentar
Fra : Kim Andersen


Dato : 23-04-04 09:00


ALTER TABLE `table` CHANGE `_colum` `_colum` TINYINT( 4 ) UNSIGNED ZEROFILL
DEFAULT '0' NOT NULL

Prøv med "unsigned zerofill"


/Kim



Peter Lykkegaard (23-04-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-04-04 09:31


"Kim Andersen" wrote
>
> ALTER TABLE `table` CHANGE `_colum` `_colum` TINYINT( 4 ) UNSIGNED
ZEROFILL
> DEFAULT '0' NOT NULL
>
> Prøv med "unsigned zerofill"
>
Hmm topic not found in BOL

- Peter



Peter Lykkegaard (23-04-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-04-04 09:54


"Jesper Stocholm" wrote

[Snip Zerofill]

> Er det noget, der overhovedet vil give mening at lave i SQL - eller skal
> jeg bide i det sure æble og lave applikationskoden om?
>
Jeg har lavet noget ZeroFill i TSQL på et tidspunkt
Du skal kikke på de forskellige string funktioner i T-SQL
Jeg kan evt vende tilbage med et foreslag senere i dag

- Pter



Jens Gyldenkærne Cla~ (23-04-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-04-04 13:21

Peter Lykkegaard skrev:

> Jeg har lavet noget ZeroFill i TSQL på et tidspunkt
> Du skal kikke på de forskellige string funktioner i T-SQL
> Jeg kan evt vende tilbage med et foreslag senere i dag

Her er en måde at gøre det på:

select right('0000' + CAST(id_enhed as varchar(4)), 5) as rpad
from enheder
order by id_enhed

Forespørgslen her er tilpasset numre på max fire cifre - men det
kan let ændres.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper Stocholm (23-04-2004)
Kommentar
Fra : Jesper Stocholm


Dato : 23-04-04 15:20

Jens Gyldenkærne Clausen <jens@gyros.invalid> wrote in
news:Xns94D491EB3EE4Ajcdmfdk@gyrosmod.dtext.news.tele.dk:

> Peter Lykkegaard skrev:
>
>> Jeg har lavet noget ZeroFill i TSQL på et tidspunkt
>> Du skal kikke på de forskellige string funktioner i T-SQL
>> Jeg kan evt vende tilbage med et foreslag senere i dag
>
> Her er en måde at gøre det på:
>
> select right('0000' + CAST(id_enhed as varchar(4)), 5) as rpad
> from enheder
> order by id_enhed
>
> Forespørgslen her er tilpasset numre på max fire cifre - men det
> kan let ændres.

Det var sgu en smart måde at gøre det på. Jeg kan ikke lige pt. gennemskue,
hvordan performance er, men det skal ikke bruges til noget kritisk i den
retning, så den løsning forsøger jeg mig med.



--
Jesper Stocholm http://stocholm.dk

Programmer's code comment:
//It probably makes more sense when you're stoned.

Peter Lykkegaard (23-04-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-04-04 15:36


"Jesper Stocholm" wrote
> Jens Gyldenkærne Clausen wrote in

> > Her er en måde at gøre det på:
> >
> > select right('0000' + CAST(id_enhed as varchar(4)), 5) as rpad
> > from enheder
> > order by id_enhed
>
> Det var sgu en smart måde at gøre det på. Jeg kan ikke lige pt.
gennemskue,
> hvordan performance er, men det skal ikke bruges til noget kritisk i den
> retning, så den løsning forsøger jeg mig med.
>

Der en en alternativ metode her

declare @len int
set @len = 10
select replicate('0', @len - len(id_enhed)) + id_enhed as rpad from enheder
order by id_enhed

Dvs du kan angive som parameter hvilken længde det endelige streng skal have
Du kan sikker selv omskrive herligheden til en funktion og bruge den

NB Hvis @len bliver for kort i forhold til id_enhed returnere den NULL

- Peter

Kontan





Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste