[MSSQL 2008]datumnotatie in twee decimalen

Pagina: 1
Acties:

Onderwerpen


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 22-07 13:16
ik zit met een probleem waar ik niet uitkom, ondanks zoeken op google en de MS-site:

stel ik heb de datum 2-9-2009 (2 september). ik wil nu als resultaat van mijn querie de dag als 02 en de maand als 09 krijgen, maar ik kom er niet helemaal uit. ik blijf respectievelijk 2 en 9 krijgen, maar moet dus twee decimalen hebben.

ik heb dus al gekeken naar CAST en CONVERT, maar tevergeefs....

verder alvast fijne kerstdagen !!!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 09:11
convert is wel de oplossing:
http://msdn.microsoft.com/en-us/library/ms187928.aspx

code:
1
2
3
4
5
declare @date datetime
set @date = '2009-9-2'

'waar 't om gaat:
select convert(varchar, @date, 105)


output: 02-09-2009

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 22-07 13:16
en dan met substring() de dag & maand eruit halen ?
ik zat meer te denken aan day() en month() functies..

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 09:11
Ik had niet helemaal begrepen dat je ze als losse kolommen wilde selecteren. Maaruh met day en month en met een case statement kun je toch heel ver komen? wat lukt er niet?

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Convert(char(5), GETDATE(),105) als je het in één veld wil terughebben.
Als je twee losse velden hebt, zou je inderdaad day of datepart kunnen gebruiken, in je presentatielaag een 0 ervoor plakken en daarvan rechter twee tekens daarvan nemen.

Kan in SQL ook uiteraard, maar volgens mij moet je dan weer eerst casten naar een varchar:
RIGHT('0' + cast(datepart(dd,getdate()) as varchar(2)),2) AS Dag

Of MSSQL zelf iets heeft met leading-zero's weet ik zo niet, dat moet wel te vinden zijn.

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 22-07 13:16
vreemd: dit werkt wel:
code:
1
2
3
select CONVERT(varchar,getdate(),105),
substring(CONVERT(varchar,getdate(),105),1,2) as maand,
substring(CONVERT(varchar,getdate(),105),4,2) as dag


nu zit ik 09 en 02, maar zodra ik het in een sproc wil toepassen krijg ik 0 en 0

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
alter procedure aaTestPK

as begin

declare @dag        varchar;
declare @maand      varchar;


set @dag=substring(CONVERT(varchar,getdate(),105),4,2);
set @maand=substring(CONVERT(varchar,getdate(),105),1,2);

print  @dag;
print  @maand;
end;

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik vraag me eerder af waarom je dit door SQL laat afhandelen en niet door je presentatielaag/view/gui/whatever? En waarom je niet gewoon een datetime type gebruikt?

Verder is dit veel simpeler + logischer:
SQL:
1
select right('0' + LTrim(Str(day(getdate()))),2) + '-' + right('0' + LTrim(Str(month(getdate()))),2)


Omdat 't nu 24-12 is zie je natuurlijk de voorloopnullen niet maar even als 'bewijs':
SQL:
1
2
3
4
declare @somedate as datetime
set @somedate = '20090902';

select right('0' + LTrim(Str(day(@somedate))),2) + '-' + right('0' + LTrim(Str(month(@somedate))),2)

code:
1
02-09

[ Voor 77% gewijzigd door RobIII op 24-12-2009 22:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 09:11
dan moet je ze wel declaren met varchar(2)

edit: verder wel met RobIII eens, je kunt't beter niet doen als je de mogelijkheid hebt om opmaak op een andere manier te regelen

[ Voor 61% gewijzigd door Daspeed op 24-12-2009 22:28 . Reden: toevoeging ]


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 22-07 13:16
RobIII schreef op donderdag 24 december 2009 @ 22:24:
Ik vraag me eerder af waarom je dit door SQL laat afhandelen en niet door je presentatielaag/view/gui/whatever? En waarom je niet gewoon een datetime type gebruikt?
ik wil dit in de SQL-db doen omdat het onderdeel uitmaakt van een soort referentienummer, bedrijfsbreed. als men besluit de werkwijze aan te passen, hoef ik dit maar op 1 plaats (mijn st. proc.) te wijzigen.

het is ondertussen gelukt...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Check m'n edit nog effe mocht je die gemist hebben ;)

[ Voor 5% gewijzigd door RobIII op 24-12-2009 22:30 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 22-07 13:16
dit is hem geworden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
alter procedure aaTestPK
@initialen varchar(2),
@projectnummer nvarchar

as begin

declare @dag        varchar(2);
declare @maand      varchar(2);


set @dag=substring(CONVERT(varchar,getdate(),105),4,2);
set @maand=substring(CONVERT(varchar,getdate(),105),1,2);
set @initialen=UPPER(@initialen);
print  @initialen + @maand+ @dag + @projectnummer;

end;


hiermee kom ik wel verder... ;) 8)7

maar idd RobIII, dat is veel makkelijker...

[ Voor 5% gewijzigd door pkouwer op 24-12-2009 22:34 . Reden: overtuigd !! ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 11-09 12:30

momania

iPhone 30! Bam!

pkouwer schreef op donderdag 24 december 2009 @ 22:33:

maar idd RobIII, dat is veel makkelijker...
Niet alleen makkelijker... zelfs 'correcter', voor zover je dit correct kan noemen ;)

Neem je whisky mee, is het te weinig... *zucht*


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 09:11
code:
1
print  @initialen + @maand+ @dag + @projectnummer;


Misschien dat ik even een onzinnige opmerking maak, maar als een project in bijvoorbeeld 2009 en 2010 valt, kun je dan geen problemen krijgen met dubbele referentienummers?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 22-07 13:16
in de database is/wordt wel een veld opgenomen voor het jaartal, alleen voor het referentienummer niet. hier wordt gekeken naar het betreffende project, per dag en koppelt hier een volgnummer en compleet referentienummer aan.

dit is ook de reden dat ik het centraal wil laten genereren....
Pagina: 1