sql >> Databáze >  >> RDS >> Sqlserver

Příklady převodu ‚date‘ na ‚datetime‘ v SQL Server (T-SQL)

Tento článek obsahuje příklady převodu datum hodnotu na datum a čas hodnotu v SQL Server.

Když převedete datum hodnotu na datetime , jsou k hodnotě přidány další informace. Důvodem je datum a čas datový typ obsahuje informace o datu i čase. Datum datový typ na druhé straně obsahuje pouze informace o datu.

Příklad 1 – Implicitní konverze

Zde je příklad implicitní konverze mezi datem a datum a čas .

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Výsledek:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Jedná se o implicitní převod, protože k jeho explicitnímu převodu nepoužíváme konverzní funkci (jako jsou ty níže). V tomto případě SQL Server provede implicitní převod za scénou, když se pokusíme přiřadit datum hodnotu na datum a čas proměnná.

Vidíme, že datum proměnná obsahuje pouze informace o datu, zatímco datetime proměnná obsahuje informace o datu i čase.

Při převodu mezi datem a datum a čas , časová složka je nastavena na 00:00:00.000 . Je to proto, že hodnota data neobsahuje žádné časové informace, takže SQL Server nemůže nijak zjistit, jaký čas chcete (pokud nějaký).

Příklad 2 – Úprava času

Pokud potřebujete změnit čas (ale zachovat stejné datum), můžete použít DATEADD() funkce udělat právě to.

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SET @thedatetime = DATEADD(hour, 8, @thedatetime)
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Výsledek:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Příklad 3 – Explicitní konverze pomocí CAST()

Zde je příklad explicitní konverze. V tomto případě používám CAST() funkce přímo v SELECT k explicitnímu převodu mezi datem a datum a čas .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime) AS 'datetime';

Výsledek:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Dostaneme tedy stejný výsledek jako implicitní převod.

Čas můžeme také upravit takto:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';

Výsledek:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Příklad 4 – Explicitní převod pomocí CONVERT()

Zde je příklad explicitní konverze pomocí CONVERT() funkce namísto CAST() .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime, @thedate) AS 'datetime';

Výsledek:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

A úprava času:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';

Výsledek:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

  1. Přehled změn indexu v PostgreSQL 11

  2. Skript pro uložení varbinárních dat na disk

  3. Jak monitorovat PostgreSQL pomocí Nagios

  4. SQL:Analyzujte řetězec oddělený čárkami a použijte jej jako spojení