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)
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.....
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!