Så tænker jeg at du enten kan lave lidt logik inden, der beriger din char med et leading '0' inden du cast'er til date. Så du lander på noget ala SELECT CAST(STUFF(STUFF(STUFF('0625384',3,0,':'),6,0,':'),9,0,'.') AS TIME)
Ellers så skal du have en case hvor du ud fra int størrelse vælger enten SELECT CAST(STUFF(STUFF(STUFF(CAST(1032459 as varchar),3,0,':'),6,0,':'),9,0,'.') AS TIME) eller SELECT CAST(STUFF(STUFF(STUFF(CAST(625384 as varchar),2,0,':'),5,0,':'),8,0,'.') AS TIME)
Den indsætter et 0 foran ja. Men nu konvertere den jo ikke strengen til et klokkeslæt. ,CAST(STUFF(STUFF(STUFF(CAST(OPRETTET_KLOK as varchar),3,0,':'),6,0,':'),9,0,'.') AS TIME)AS KLOKKEN
virker ind til talrækken er for kort.
Så kan ikke lige se hvordan jeg skal få din kode med ind.
@Ramad Den vil ikke køre din kode CAST(STUFF(STUFF(STUFF(CAST(OPRETTET_KLOK as varchar),2,0,':'),5,0,':'),8,0,'.') AS TIME) as klokken grundet følgende fejl. Conversion failed when converting date and/or time from character string.
De viste løsninger er lige lovligt kringlede synes jeg. De går alle omvejen over en streng, hvilket som regel ikke er befordrende for hastigheden. Mit alternativ ville være at gøre brug af simpel aritmetik og så ellers bruge DateAdd funktionen:
declare @intTime int = 1032459 -- skal opfattes som 10:32:45.9
DateAdd caster til DateTime, derfor kommer "dummy-datoen" med, men den vll blive undertrykt hvis det overføres til f.eks. Excel.
Hvis du vil se det i Time format kan du tilføje en ekstra cast til Time: select cast(dateadd(hour,@intTime / 100000, dateadd(minute, @intTime / 1000 - @intTime / 100000 * 100, dateadd(second,@intTime % 1000 / 10, dateadd(millisecond,@intTime % 10 * 100,0)))) as time) as LoggedTime
Resultatet vises så som: LoggedTime ---------------- 10:32:45.9000000
Hvis du skulle undre dig over beregningerne, så tænk på, at SQL Server behandler alle tal som integer (også mellemresultater) med mindre man skriver konstanter som f.eks. 10.0 -- havde jeg gjort det, var mellemresultaterne blevet til floating point variabler og en beregning som 1032459 / 100.0 ville være blevet til 10324,59 -- nu, hvor jeg bare bruger heltal, så bliver det i stedet til 10324 (decimalerne bliver altså smidt væk). Ikke helt logisk, men sådan er det, og så kan man jo bare udnytte det. :-)
Synes godt om
Ny brugerNybegynder
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.