Tak a ještě jsem vymyslel druhou část, kde už vím že to prasečinka je, ale nevím jak to řešit jinak. Jde o to že procedura výše mi vrátí, zda je datum vetší a rovno nebo menší. A na základě toho potřebuji vzít výše uvedené datum a: 1) Pokud je aktuální datum větší nebo rovno, vezmu zadaný den a měsíc a dám k němu letošní rok. 2) Pokud je aktuální datum menší, vezmu výše uvedené datum a dám k němu loňský rok. Přidávám ještě jednou výše uvedenou proceduru která je trochu upravená a do které je už přidaná zmíněná funkce.
DECLARE @sledovaneDatum DATETIME
DECLARE @vysledek varchar(10)
DECLARE @letosniVyroci bit --indikuje zda už letos bylo výročí.
--TRUE=letos už bylo výročí, pro přepočet věku vezmu letošní výročí
--FALSE=letos výročí ještě nebylo, pro přepočet věku vezmu loňské výročí
SET @sledovaneDatum='2007-08-25'
IF datepart(month,getdate())>datepart(month,@sledovaneDatum) SET @letosniVyroci=1 --aktuální měsíc je větší než sledovaný
IF datepart(month,getdate())=datepart(month,@sledovaneDatum) --aktuální i sledovaný měsíc jsou si rovny
BEGIN
IF datepart(day,getdate())>=datepart(day,@sledovaneDatum) SET @letosniVyroci=1
ELSE
SET @letosniVyroci=0
END
IF datepart(month,getdate())<datepart(month,@sledovaneDatum) SET @letosniVyroci=0 --aktuální měsíc je menší než sledovaný
IF @letosniVyroci=0 SET @vysledek=CONVERT(varchar(4),datepart(year,getdate())-1)+'-'+CONVERT(varchar(2),datepart(month,@sledovaneDatum))+'-'+CONVERT(varchar(2),datepart(day,@sledovaneDatum))
IF @letosniVyroci=1 SET @vysledek=CONVERT(varchar(4),datepart(year,getdate()))+'-'+CONVERT(varchar(2),datepart(month,@sledovaneDatum))+'-'+CONVERT(varchar(2),datepart(day,@sledovaneDatum))
select @vysledek
Zde bych potřeboval poradit jak se vyvarovat tomu ošklivému skládání stringu. Na serveru mi to teď šlape, ale nevznikne problém když bych proceduru použil na serveru s jinou jazykovou kulturou? A pokud by vzniknul problém, vyřeší to SET dateformat ymd ? Jak vlastně funguje? Pro přepočet by to mělo být OK, ale co když hodnotu uložím do tabulky?
|