Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Formatera siffror högerjusterat, fylla ut med nollor

Postades av 2004-01-21 15:38:27 - Per Hultqvist, i forum sql-server/msde, Tråden har 2 Kommentarer och lästs av 1249 personer

Hej,

Jag har en applikation där beställaren vill ha en kod för varje post, som är en sammanslagning av en produktkod och ett löpnummer taget från en separat löpnummerserie för varje produkt.

Exempel. De första posterna på produkterna PK och SK kommer att heta PK1,SK1,PK2,SK2 o s v

I databasen är detta separerat i två kolumner, Code(varchar) och Number(int). Nu till frågan:

För att sorteringen i användargränssnittet (i en grid, när man klickar på ett kolumnhuvudet) ska bli riktig så måste jag fylla ut med nollor för mellan produktkoden och löpnumret så att löpnumret blir högerjusterat. Ex PK0001, PK0123 o s v. Eventuellt kommer jag att tillåta att användaren själv bestämmer hur många positioner som ska hållas (dvs i praktiken hur många poster som kan registreras på produkten) eller så kommer jag dynamiskt att öka på med en position när så krävs. När post nummer 100 läggs in så kommer post P99 att visas som P099 för användaren i fortsättningen.

Jag behöver alltså en liten effektiv SQL-snutt som slår samman kolumnerna Code och Number och högerjusterar Number i x antal positioner...jag hoppas ni förstår. Jag kan säkert fixa en lösning på detta själv med lite stränghantering i SQL, men eftersom det kan handla om tusentals poster som ska formateras på detta vis så vill jag gärna ha tips på effektivast möjliga lösning.

Idag använder jag följande snutt för att slå ihop de två kolumnerna (och gardera mig för NULL-värden) :

ISNULL(Task.Code + Convert(varchar,ISNULL(Task.Number,'''')),'''') as TaskNumber


Svara

Sv: Formatera siffror högerjusterat, fylla ut med nollor

Postades av 2004-01-21 17:20:31 - Pelle Johansson

Gör om denna princip till sql:

varde = 532
newstring = right("00000" & varde, 5)

vilket ger 00532


Svara

Sv: Formatera siffror högerjusterat, fylla ut med nollor

Postades av 2004-01-23 16:47:58 - Per Hultqvist

Principen är jag med på, men är det ingen som har synpunkter på hur man gör det optimalt med SQL.

Bör jag t ex göra en vy av SQL-frågan, och sedan hämta datan från vyn? Nedan har jag en SQL-sats som fungerar och det är den fetstilta texten som är intressant. Den känns inte så snygg.

Om jag lägger nedanstående i en vy, kommer SELECT-satsen som ligger i den fetstilta texten (subqueryn som hämtar maxlängden på siffran) att köras mer än en gång? Inte en gång per rad som returneras hoppas jag?

SELECT dbo.Task.ID, dbo.Task.ProjectID, dbo.Task.Priority, dbo.Task.Header, dbo.Task.Description, dbo.Task.TestInformation, dbo.Task.StatusID,
dbo.Task.ResponsibleID, dbo.Task.LocationID, dbo.Task.TaskTypeID, dbo.Task.RequiresManualChange, dbo.Task.ManualDescription,
dbo.Task.CheckedOut, dbo.Task.CheckedOutByID, dbo.Task.CheckedOutDate, dbo.Task.Assigned, dbo.Task.AssignedToID, dbo.Task.AssignedByID,
dbo.Task.AssignedDate, dbo.Task.RegisteredByID, dbo.Task.RegisteredDate, dbo.Task.ReportedBy, dbo.Task.ReportedCompany,
dbo.Task.ReportedEmail, dbo.Task.ReportedPhone, dbo.Task.ReportedDate, dbo.Task.VersionVerifiedID, dbo.Task.VersionFoundID, dbo.Task.Notify,
dbo.Task.SeverityID, dbo.Task.MailBoxID, dbo.Project.Name AS ProjectName, ISNULL(VersionFound.Name, '''') AS VersionFoundName,
ISNULL(VersionVerified.Name, '''') AS VersionVerifiedName, dbo.TaskType.Name AS TaskTypeName, ISNULL(dbo.Status.Name, '''') AS StatusName,
ISNULL(dbo.Location.Name, '''') AS LocationName, ISNULL(dbo.Severity.Name, '''') AS SeverityName, ISNULL(dbo.Priority.Name, '''') AS PriorityName,
dbo.Task.SourceFileChanges, dbo.Task.DataBaseChanges, dbo.Task.StoredProcedureChanges, dbo.Task.OtherChanges,
dbo.Task.ExternalDescription, dbo.Task.LocationSetGUID, ISNULL(dbo.LocationSet.Name, '''') AS LocationSetName, dbo.Task.ProductGUID,
ISNULL(dbo.Product.Name, '''') AS ProductName, dbo.Task.Number, dbo.Task.Code, <b>ISNULL(dbo.Task.Code, '')
+ ISNULL(RIGHT('0000000000' + CONVERT(varchar, dbo.Task.Number),
(SELECT Len(CONVERT(varchar, MAX(ISNULL(Task.Number, 0))))
FROM Task)), '') AS TaskNumber</b>, dbo.Task.LastChangeDate, dbo.Task.LastChange, dbo.MailBox.LastMessageDate
FROM dbo.Task LEFT OUTER JOIN
dbo.Project ON dbo.Project.ID = dbo.Task.ProjectID LEFT OUTER JOIN
dbo.Version VersionFound ON VersionFound.ID = dbo.Task.VersionFoundID LEFT OUTER JOIN
dbo.Version VersionVerified ON VersionVerified.ID = dbo.Task.VersionVerifiedID LEFT OUTER JOIN
dbo.TaskType ON dbo.TaskType.ID = dbo.Task.TaskTypeID LEFT OUTER JOIN
dbo.Status ON dbo.Status.ID = dbo.Task.StatusID LEFT OUTER JOIN
dbo.Location ON dbo.Location.ID = dbo.Task.LocationID LEFT OUTER JOIN
dbo.LocationSet ON dbo.LocationSet.GUID = dbo.Task.LocationSetGUID LEFT OUTER JOIN
dbo.Severity ON dbo.Severity.ID = dbo.Task.SeverityID LEFT OUTER JOIN
dbo.Priority ON dbo.Priority.ID = dbo.Task.Priority LEFT OUTER JOIN
dbo.Product ON dbo.Product.GUID = dbo.Task.ProductGUID LEFT OUTER JOIN
dbo.MailBox ON dbo.MailBox.ID = dbo.Task.MailBoxID


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
488
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies