webForumDet fria alternativet

Konvertera årtal till Datetime

2 svar · 449 visningar · startad av Obbelix

ObbelixMedlem sedan okt. 2002257 inlägg
#1

Hej.

Har en tabell innhållande ett par tusen spelare (personer) som när systemet byggdes angavs med endast födelseår. Nu ska detta ändras så alla ska anges med åååå-mm-dd i en Datetime. Behöver då samtidigt konvertera alla redan inlagda till det nya och undrar då om man kan göra det i en enda sql-sats?

Idag är fältet av typen Varchar och innehåller årtal med både två och fyra siffor. Alla är dock födda på 1900-talet så om det är angivet med två siffror ska 19 läggas till framför.
De ska i det nya fältet få månad och dag 01 (ex. 80 -> 1980-01-01)

Nuvarande tabell

id  |  namn  |  player_year  |  player_born
3      Peter    78
4      Kalle    1979
6      Nisse    82

Önskat resultat:

id  |  namn  |  player_year  |  player_born
3      Peter    78              1978-01-01
4      Kalle    1979            1979-01-01
6      Nisse    82              1982-01-01
BrimbaMedlem sedan dec. 19995 875 inlägg
#2

Detta borde fungera.

DECLARE @table table (id int, namn varchar(50), player_year varchar(4))

INSERT INTO @table
	SELECT 3,'Peter','78'
	UNION ALL 
	SELECT 4,'Kalle','1979'
	UNION ALL 	
	SELECT 6,'Nisse','82'

SELECT 
	id, namn, player_year,
	(CASE WHEN LEN(player_year) = 2 THEN DATEADD(year, CAST(player_year AS INT), '1900-01-01') ELSE CAST(player_year AS SMALLDATETIME) END) AS player_birth
FROM 
	@table

Notera att du inte behöver ha med all kod utan det du behöver kolla på är CASE-satsen.

ObbelixMedlem sedan okt. 2002257 inlägg
#3

Tackar!

Modifierade case-satsen då det fanns några fält som var tomma osv, men fick det att funka till slut.

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)