sloučení datumu a času   zodpovězená otázka

SQL, Databáze

Zdravím, mám v databázi dva sloupce, oba typu datetime a potřeboval bych sloučit datum z jednoho sloupce a čas ze sloupce druhého do nějakého aliasu. Existuje na to přímo nějaký select? Potřeboval bych ale aby to zůstalo pořád jako datetime a ne třeba jako string, to bych věděl jak udělat, ale zdá se mi to jako zbytečné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

T-SQL na to přímo funkce nemá, ale je možné si pomoc funkcemi datepart a dateadd. Příklad:

declare @Datum1 datetime = '2010-01-01 12:00:10'
declare @Datum2 datetime = '2010-05-01 16:00:15'
	
select dateadd(day, datepart(day, @Datum1) - 1, 
       dateadd(month, datepart(month, @Datum1) - 1, 
       dateadd(year, datepart(year, @Datum1)-1900,
       dateadd(hour, datepart(hour, @Datum2),
       dateadd(minute, datepart(minute, @Datum2),
       dateadd(second, datepart(second, @Datum2), 0
       ))))))

Pro přehlednost by bylo dobré ten složitý výraz plný dateadd a datepart zabalit do skalární SQL funkce.

Nemám vyzkoušené jak je to rychlé, ale jedná se o čistě aritmetické operace (žádné konverze z/na string), takže by to mohlo být použitelné.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Z části to takto funguje, já sem si to upravil takto:

SELECT DATEADD(day, DATEPART(day,(SELECT DATUM FROM Zapis WHERE id=114)) - 1,
DATEADD(month, DATEPART(month,(SELECT DATUM FROM Zapis WHERE id=114)) - 1, 
DATEADD(year, DATEPART(year,(SELECT DATUM FROM Zapis WHERE id=114)) - 1900, 
DATEADD(hour, DATEPART(hour,(SELECT TIME FROM Zapis WHERE id=114)), 
DATEADD(minute, DATEPART(minute,(SELECT TIME FROM Zapis WHERE id=114)), 
DATEADD(second, DATEPART(second,(SELECT TIME FROM Zapis WHERE id=114)), 0)))))) AS DatumCas

bohužel mi to funguje pouze s klauzulí WHERE, bez ní mi to nevypíše nic, já ale potřebuji vypsat všechny výsledky, tudíž WHERE tam být nemůže.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V parametrech funkcí použijte sloupce tabulky Zapis. Ne podselecty, to je nesmysl:

SELECT DATEADD(day, DATEPART(day, DATUM) - 1,
DATEADD(month, DATEPART(month, DATUM) - 1, 
DATEADD(year, DATEPART(year, DATUM) - 1900, 
DATEADD(hour, DATEPART(hour, TIME), 
DATEADD(minute, DATEPART(minute, TIME), 
DATEADD(second, DATEPART(second, TIME), 0)))))) AS DatumCas
from Zapis

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback