Hoppa till innehåll

  • Logga in via Facebook Logga in via Twitter Logga in via Windows Live Log In with LinkedIn Log In with Google      Logga in   
  • Registrera dig nu!

Uppdatera fält med datum/tid


Den här tråden har blivit arkiverad. Det betyder att du inte kan skriva något inlägg i tråden.
2 svar i denna tråden

#1 emoffster

emoffster

  • 1 inlägg

Skriven 04 October 2010 - 23:26

Hej,
Har satt upp en liten intern supportdatabas för att mäta lite tid på våra supportärenden.
Jag vill att när fältet "sign" får ett värde (alltså någon av oss plockar ett öppet ärende) ska fältet "starttid" få datum/tidsstämpel.
Kan någon hjälpa mig med en trigger/lagrad procedur? Kommer även att lägga en sådan när ärendet blir avbockat, men det blir ju samma förfarande, fast andra fält.

Tackar!

#2 martenrune

martenrune

  • 622 inlägg

Skriven 04 October 2010 - 23:34

Funktionen du vill använda är getdate()

Den ger datum och tid. Jag har ett litet gulligt script som formaterar getdate() i alla möjliga och omöjliga format. Tex tidsdelen, datumdelen, etc etc. Bar kör det i SSMS så visar det dig en kolumn med hur datumet blir, och den andra ger select statement som ger det formatet. Låter krångligt men är busenkelt. I ditt fall finns andra lösningar, men om du vill göra det på sql nivå och inte GUI nivå fungerar detta. Det bör nämnas att du kan ha det direkt inbyggt i din tabell istället. som default värde i en kolumn. Skicka inte med data och default värdet sätts. Sedan kan du ha en update trigger som sätter en annan kolumn vid varje update. Och en flagga för när ärendet är slut. Då kan du räkna ut tiden. Men det blir gärna lite råddigt när man skall ta hänsyn till helger, arbetstider, dag före röd dag och helgdagar.

Skickar med scriptet som får dig på banan så att säga.

set nocount on
DECLARE @Date int
create table #temp
(
Type int,
date varchar(50),
Code Varchar(50)
)
set @Date=131
While @Date>=0
begin
if((@Date>=0 and @date<15) or (@Date>=20 and @date<26) or (@Date>=100 and @date<=114) or @Date in (120,121,126,130,131))
insert into #temp
select convert(varchar,@date),convert(varchar,getdate(),@Date),'SELECT convert(varchar,getdate(),' + cast(@Date as varchar) + ')'
set @Date=@Date-1
end
select * from #temp
drop table #Temp

SELECT
Cast(CONVERT(VARCHAR,getdate(),110) as datetime) AS 'Today 00:00' --No Formatting
,convert(varchar,dateadd(hh,18,Cast(CONVERT(VARCHAR,getdate(),110) as datetime)),20) AS 'Today 18:00' -- 20 = format YYYY-MM-DD HH:NN:SS
,convert(varchar,dateadd(hh,datepart(hh,getdate())+1,convert(varchar,getdate(),10)),20) as 'Now next hour on the hour'

#3 martenrune

martenrune

  • 622 inlägg

Skriven 05 October 2010 - 00:19

använd inte trigger. Dålig design och det ger dålig prestanda. Använd en stored proc.

Designförslag. Skapa en tabell med bl a
ID identity (1,1),
created datetime default getdate(),
updated datetime default null,
caseclosed bit default 0

och alla andra kolumner du vill.

Vid insert utelämna ID, created, updated och caseclosed

skapa en storedproc som tar som parametrar

ID (för att hantera rätt record), caseclosed (så du vet om det är sista inmatningen) och alla andra kolumner du vill ha.

Kör sedan update
set updated = getdate()
set caseclosed = @caseclosed
set textnotering = textnotering + chr(10) + @adderadtext
where ID = @ID

Kör rakt ur huvudet, kan vara

set
updated = getdate(),
caseclosed = @caseclosed,
textnotering = textnotering + chr(10) + @adderadtext
where ID = @ID

eller ngt i den stilen. Men det är inte så svårt att lista ut. Med denna lösning får du created, updated och closed samt uppdaterat textfält.

Lycka till
Mårten