webForumDet fria alternativet

Funktion som räknar ut storleken på en SQL-post?

Databaser & SQL

8 svar · 370 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Som rubriken antyder undrar jag om det finns en funktion fördefinierad i SQL som kan räkna ut storleken på en viss post. Har för mig att jag sätt det tidigare i en tråd men kunde inte hitta igen den nu :)

Medlem sedan juni 200032 967 inlägg
#2
SELECT Len(fältnamn) FROM tabell

...om du nu med "storleken på en post" menar längden på innehållet i ett fält.

Medlem sedan apr. 20041 597 inlägg
#3

@nders skrev:

SELECT Len(fältnamn) FROM tabell

...om du nu med "storleken på en post" menar längden på innehållet i ett fält.

Inte den storleken :) ... utan den som normalt visas i mailprogram hur stort ett meddelande är i Kb...

Medlem sedan juni 200032 967 inlägg
#4

Hmm...

Har du mailen i en databas? Vilken dbms? Vilka fälttyper används för att lagra mailen? Var har du dina attachments?

Det är väl bara att lägga ihop fältlängden för de aktuella fälten och räkna om till kb, eller missförstår jag frågan totalt?

Medlem sedan apr. 20041 597 inlägg
#5

@nders skrev:

Hmm...

Har du mailen i en databas? Vilken dbms? Vilka fälttyper används för att lagra mailen? Var har du dina attachments?

Det är väl bara att lägga ihop fältlängden för de aktuella fälten och räkna om till kb, eller missförstår jag frågan totalt?

Det kan vara jag som uttryckte mig lite luddigt.

Jag har ett e-meddelande system i något som kan liknas vid en portal. Där lagrar jag internmeddelandena mellan användare i en MySQL-databas. Jag vill exempelvis kunna räkna både den totala storleken för alla meddelanden en användare har i sin e-brevlåda men även storleken för ett enskilt meddelande. Anledningen till att jag vill kunna göra det är för att jag har olika begränsningar storleksmässigt för brevlådorna för olika användarnivåer...

Hoppas jag var lite tydligare nu :)

Medlem sedan juni 200032 967 inlägg
#6

Ok. Om vi utgår ifrån att ett tecken är en byte (kan ju variera beroende på datatyp) så skulle det kanske kunna se ut så här om man vill räkna ut hur många kb en viss användare använt.

SELECT SUM(LEN(fältnamn)) / 1024 AS TotalSize FROM tabellen WHERE userid = 4711
Medlem sedan apr. 20041 597 inlägg
#7

Dessa fält använder jag mig av:

messageID 
posted
subject 
content 
folderID 
fromID
toID ¨
Medlem sedan apr. 20041 597 inlägg
#8

Skulle det kunna se ut så här med mina fält?

SELECT SUM(LEN(memberID)) + SUM(LEN(posted)) + SUM(LEN(subject)) + SUM(LEN(content)) + SUM(LEN(folderID)) +SUM(LEN(fromID)) + SUM(LEN(toID)) / 1024 AS TotalSize FROM tabellen WHERE userid = 4711

Kommer inte ihåg varför man delar med 1024 och inte 1000 när man ska göra om det till Kb?

Medlem sedan juni 200032 967 inlägg
#9

LEN() är en funktion som returnerar längden på data i fält av typen varchar / char / text. Om du använder andra datatyper så får du lägga till det på annat sätt.

Med rätt parenteser så borde det bli så här:

SELECT (SUM(LEN(memberID)) + SUM(LEN(posted)) + SUM(LEN(subject)) + SUM(LEN(content)) + SUM(LEN(folderID)) +SUM(LEN(fromID)) + SUM(LEN(toID))) / 1024 AS TotalSize FROM tabellen WHERE userid = 4711

En kb är 2^10 bytes, och inte exakt 1000 bytes.

http://susning.nu/Kilobyte

265 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)