[MSSQL] TSQL statement problemen met datum

Pagina: 1
Acties:

  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 23-05 18:45

Gé Brander

MS SQL Server

Topicstarter
Ik heb een wat vreemd probleem. Als ik in een view gebruik maak van de User Defined Function die als eerste hier onder staat, zie ik in de view netjes de datum terugkomen zoals ik het in de UDF definieer. De view staat er ook bij.

Als ik dus een select [dbo].[dtm_cnv](getdate()) doe krijg ik niet netjes 12/07/2004 terug maar 2/12/Jul.

Iemand een idee wat ik nu toch over het hoofd zie?

(Deze code werkt op elke SQL Server 2000 instance, het gaat om opvragingen van job history)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
-- User defined function om de datum met een bepaald
-- format terug te krijgen, vb: 12/07/2004 (dd/mm/yyyy)

CREATE FUNCTION [dbo].[dtm_cnv] (@Datum VARCHAR(10))
RETURNS VARCHAR(10)
BEGIN
RETURN  (SUBSTRING(CAST(@Datum AS VARCHAR(10)),7,2) + '/' +  
        SUBSTRING(CAST(@Datum AS VARCHAR(10)),5,2) + '/' +  
        SUBSTRING(CAST(@Datum AS VARCHAR(10)),1,4))
END
GO


-- View die gebruik maakt van de User Defined Function
-- waarbij de [run_date] waarde terugkomt in het format
-- dd/mm/yyyy zoals ik in de functie definieer
CREATE VIEW [dbo].[_Vw_dbb_job_his] AS 
SELECT  [h].[server],
    [j].[name],
    [h].[run_status],
    dbo.dtm_cnv([h].[run_date]) AS [run_date],
    dbo.tyd_cnv([h].[run_time]) AS [run_time],
    dbo.tyd_cnv([h].[run_duration]) AS [run_duration],
    [h].[message],
    [j].[enabled],
    [h].[retries_attempted]
FROM    [msdb].[dbo].[sysjobhistory] AS [h],
    [msdb].[dbo].[sysjobs] AS [j]
WHERE   [h].[job_id] = [j].[job_id]
AND [h].[step_id] = 0


-- SELECT statement (run_date komt terug in format
-- dd/mm/yyyy)
SELECT * FROM [da_dbb].[dbo].[_Vw_dbb_job_his]


-- SELECT statement met where clause geeft niets terug
-- omdat de dbo.dtm_cnv function opeens een ander format
-- teruggeeft (2/12/Jul /= 12/07/2004)
SELECT * FROM [da_dbb].[dbo].[_Vw_dbb_job_his]
WHERE [run_date] = dbo.dtm_cnv(getdate())

     Moet dus worden:
          SELECT * FROM [da_dbb].[dbo].[_Vw_dbb_job_his]
          WHERE [run_date] = CONVERT(VARCHAR(10),getdate(),103)


-- SELECT statement om de waarde van de dag van 
-- vandaag op te halen met behulp van de functie
-- geeft opeens een andere format dan in het eerste
-- select statement. (2/12/Jul)
SELECT dbo.dtm_cnv(getdate())


Ok! Ik zie het al! Sorry voor de te snelle posting!
De run_date colom bevat geen standaard datum maar is in de vorm van '20040709'. Dus dan is het logisch dat dtm_cnv op getdate() een andere vorm teruggeeft.....

[ Voor 10% gewijzigd door Gé Brander op 12-07-2004 08:52 ]

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Kijk eens naar CONVERT(VARCHAR(10),DeDatum,105) om een datum in een bepaalde vorm terug te geven. Waarbij 105 vervangen kan worden voor andere datumforumaten.

Overigens is het presenteren van een bepaald formaat datum een in mijn ogen een taak voor de presentatielaag en niet voor de database.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 23-05 18:45

Gé Brander

MS SQL Server

Topicstarter
code:
1
SELET CONVERT(VARCHAR(10),getdate(),103)
Geeft de goede datum format terug. Waarvoor mijn dank, dat ik daar niet aan dacht...

Deze code wordt overigens gebruikt om te checken of alle job's probleemloos gelopen hebben, dus met behulp van een gedeelte van deze code wordt een webtask gemaakt waarmee ik kan zien welke job's foutgelopen zijn.

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 21-05 21:51

pistole

Frutter

c70070540 schreef op 12 juli 2004 @ 08:51:
code:
1
SELET CONVERT(VARCHAR(10),getdate(),103)
Geeft de goede datum format terug. Waarvoor mijn dank, dat ik daar niet aan dacht...

Deze code wordt overigens gebruikt om te checken of alle job's probleemloos gelopen hebben, dus met behulp van een gedeelte van deze code wordt een webtask gemaakt waarmee ik kan zien welke job's foutgelopen zijn.
puntjes op de i: stel het datatype dat de functie returns ook goed in ;)

Ik frut, dus ik epibreer


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 23-05 18:45

Gé Brander

MS SQL Server

Topicstarter
pistole schreef op 12 juli 2004 @ 09:00:
[...]puntjes op de i: stel het datatype dat de functie returns ook goed in ;)
Begrijp ik je hier misschien niet helemaal? Volgens mij is in de functie het datatype ook varchar(10)?

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!