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


Avrundar Cursor värden automatisk?

Postades av 2005-05-06 16:46:31 - Erik Viklund, i forum sql-server/msde, Tråden har 6 Kommentarer och lästs av 764 personer

Har en cursor som hämtar värden från en tabell. Om jag har ett numeriskt värde som jag vet är 5,7123123 så blir det 6 när cursorn hämtat det. Varför? Går det att hindra detta?


Svara

Sv: Avrundar Cursor värden automatisk?

Postades av 2005-05-06 20:58:31 - Martin Adrian

Skulle gissa att du fått in en implicit konvertering till integer någonstans.

Vilket programspråk använder du? Kan du visa hur koden ser ut där du hämtar värdet?


Svara

Sv:Avrundar Cursor värden automatisk?

Postades av 2005-05-09 09:03:46 - Erik Viklund

Det är en lagrad procedur i MSSQL 2000 som skapar x antal rader (beroende på de startdatum och slutdatum som kommer in) i en tabell. Vissa kolumner i denna tabell fylls med värden från en annan tabell och det är här det blir fel någonstans. Så här ser min SP ut:

<code>
CREATE PROCEDURE calcTimeByDepAndDay
@startdate varchar(50),
@stopdate varchar(50),
@department varchar(50),
@normstartdate datetime,
@normstopdate datetime
AS
DECLARE @EmpName varchar(50), @Dep varchar(8), @Ftg varchar(50), @Nt numeric(5)
DECLARE emp_cursor CURSOR
FOR SELECT Distinct dbo.Company.CompanyName,dbo.Employee.Department, dbo.Employee.EmployeeName, - + dbo.Employee.WorkTimeWeek/7 FROM Employee INNER JOIN
dbo.Company ON dbo.Employee.CompanyNr = dbo.Company.CompanyNr Where dbo.Employee.Department = @department And dbo.Employee.PersonalKategory = '01'
OPEN emp_cursor
DELETE FROM normdate

set nocount on
declare @lonetyp varchar(50), @kat varchar(50), @underkat varchar(50)
FETCH NEXT FROM emp_cursor
INTO @Ftg, @Dep, @EmpName, @Nt
WHILE (@@FETCH_STATUS = 0)
Begin
select @kat = 'Arbetstid' , @underkat = 'Normtid' , @lonetyp = 'NT'
while (@normstopdate >= @normstartdate)
BEGIN
insert into normdate values (@kat, @underkat, @Ftg, @Dep,@EmpName , @lonetyp, @normstartdate, @Nt)
select @normstartdate = dateadd(day, 1, @normstartdate)
END
FETCH NEXT FROM emp_cursor into @Ftg, @Dep, @EmpName, @Nt
End
CLOSE emp_cursor
DEALLOCATE emp_cursor
</code>

Det är i beräkningnen "- + dbo.Employee.WorkTimeWeek/7" det blir fel. Skall returnera ca 5,71 men när värdet läggs in i den nya tabellen så blir det (avrundas till) 6.

Om jag i Query Analysern enbart skriver:

<code>
SELECT Distinct dbo.Company.CompanyName,dbo.Employee.Department, dbo.Employee.EmployeeName, - + dbo.Employee.WorkTimeWeek/7 FROM Employee INNER JOIN
dbo.Company ON dbo.Employee.CompanyNr = dbo.Company.CompanyNr Where dbo.Employee.Department = @department And dbo.Employee.PersonalKategory = '01'
</code>

Så får jag inte 6 utan 5,71.


Svara

Sv: Avrundar Cursor värden automatisk?

Postades av 2005-05-09 09:46:09 - Johan Svensson

Hej,

Det är som Martin skriver, du får en implicit konvertering till integer i din kod. Du skall skriva så här istället:

<code>
SELECT Distinct dbo.Company.CompanyName,dbo.Employee.Department, dbo.Employee.EmployeeName, - + dbo.Employee.WorkTimeWeek/7.0 FROM Employee INNER JOIN
dbo.Company ON dbo.Employee.CompanyNr = dbo.Company.CompanyNr Where dbo.Employee.Department = @department And dbo.Employee.PersonalKategory = '01'
</code>

Genom att ange 7.0 istället för 7 så talar du om att du jobbar med decimaltal och inte heltal. Sedan kan man alltid vara ännu tydligare genom att använda CAST eller CONVERT (kolla gärna MSDN / T-SQL hjälpen för dessa).

Mvh,
Johan


Svara

Sv:Avrundar Cursor värden automatisk?

Postades av 2005-05-09 11:50:32 - Erik Viklund

Tack så mycket för det snabba svaret. Testade med "/7.0" istället för "/7" och resultatet blev samma.
Kanske skall tillägga att det tidigare inte returnerade 6 utan 6.0000. Både kolumnen som värdet hämtas från "- + dbo.Employee.WorkTimeWeek/7" och kolumnen som det läggs in i "insert into normdate values (@kat, @underkat, @Ftg, @Dep,@EmpName , @lonetyp, @normstartdate, <b>@Nt</b>) " är av typen numeric (5). Även variabeln som värdet sparas i mellan förflyttningen "DECLARE @Nt numeric(5)" är deklererad som en numeric (5) så det borde ju då inte vara fel här..

Det verkar ju som om den gör en implicit avrundning från 5,71xxx till 6.0000.

[Edit - La till nedanstående]

Läste i TSQL hjälpen att när ett numeriskt värde hämtas och sätts in i en kolumn för numerska värden så kan data "tappas" om man inte gör en explicit typomvandling, dvs använder CAST eller Convert. Detta precis som ni skrev. Har försökt använda CAST och CONVERT utan resultat. Kan någon visa hur det skall se ut?

Detta testade jag:
<code>
- + CAST(dbo.Employee.WorkTimeWeek/7 as Numeric)
'och detta
- + CAST(dbo.Employee.WorkTimeWeek as Numeric)/7
'och detta
- + CONVERT(Numeric (5),dbo.Employee.WorkTimeWeek/7)
'och detta
- + CONVERT(Numeric (5),dbo.Employee.WorkTimeWeek)/7
</code>


Svara

Sv: Avrundar Cursor värden automatisk?

Postades av 2005-05-09 16:34:23 - Håkan Borneland

Hej!

Testa:
<b>- + CAST( dbo.Employee.WorkTimeWeek/7 as Numeric( 5,2 ) )</b>
Femman anger det totala antalet siffror i talet. ( t.ex 532,23 )
Tvåan anget hur många decimaler du vill ha, av det totala antalet siffror
Du får testa dig fram till det som passar dig.

EDIT: Gäller alla ställen där du deklarerar numeric.
Skriver du bara numeric(5), kan det bli klent med decimaler.

//Håkan


Svara

Sv:Avrundar Cursor värden automatisk?

Postades av 2005-05-10 08:27:41 - Erik Viklund

Löste det med att CAST:a om den till char istället, men skall testa att göra som du föreslog Håkan. IOM detta anser jag detta som löst.


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
554
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