Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przykłady konwersji „data” na „datetime2” w SQL Server (T-SQL)

Ten artykuł zawiera przykłady konwersji daty wartość do datetime2 wartość w SQL Server.

Po przekonwertowaniu daty wartość datetime2 , dodatkowe informacje są dodawane do wartości. Dzieje się tak, ponieważ datetime2 typ danych zawiera zarówno informacje o dacie, jak i godzinie. data z drugiej strony typ danych zawiera tylko informacje o dacie.

data/godzina2 typ danych jest w zasadzie rozszerzeniem datetime typ danych. Ma większy zakres dat, większą domyślną precyzję ułamkową i opcjonalną precyzję określoną przez użytkownika.

W każdym razie proces konwersji jest dokładnie taki sam, niezależnie od typu danych. Jedyną różnicą jest ilość informacji dostępnych między data , data i godzina i data/godzina2 .

Przykład 1 – Konwersja niejawna

Oto przykład niejawnej konwersji między data i data/godzina2 .

DECLARE @thedate date, @thedatetime2 datetime2
SET @thedate = '2020-12-01'
SET @thedatetime2 = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime2 AS 'datetime2';

Wynik:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

Jest to niejawna konwersja, ponieważ nie używamy funkcji konwersji (takich jak te poniżej) do jawnej konwersji. W takim przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać datę wartość do datetime2 zmienna.

Widzimy, że data zmienna zawiera tylko informacje o dacie, natomiast datetime2 zmienna zawiera zarówno informacje o dacie, jak i godzinie.

Ponadto otrzymujemy więcej informacji o czasie, niż otrzymalibyśmy, gdybyśmy przekonwertowali je na data-godzina typ danych.

Podczas konwersji między datą i data/godzina2 używając domyślnej precyzji (7), składnik czasu jest ustawiony na 00:00:00.0000000 (w porównaniu z 00:00:00.000 dla data i godzina ). Jeśli wolisz, możesz zmniejszyć precyzję (patrz poniżej). Zmniejszenie precyzji może również zmniejszyć ilość miejsca wymaganego do przechowywania wartości.

Powodem, dla którego składnik czasu ma same zera, jest to, że wartość daty nie zawiera żadnych informacji o czasie, więc nie ma możliwości, aby SQL Server wiedział, która godzina jest potrzebna (jeśli w ogóle).

Przykład 2 – Modyfikacja czasu

Jeśli potrzebujesz określić godzinę (ale zachować tę samą datę), możesz użyć DATEADD() funkcja właśnie to zrobić.

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

Wynik:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

Przykład 3 – Jawna konwersja za pomocą CAST()

Oto przykład jawnej konwersji. W tym przypadku używam CAST() działać bezpośrednio w SELECT oświadczenie o jawnej konwersji między datą i data/godzina2 .

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

Wynik:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

Więc otrzymujemy ten sam wynik, co niejawna konwersja.

Możemy również dostosować czas w ten sposób:

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

Wynik:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

Przykład 4 – Jawna konwersja przy użyciu funkcji CONVERT()

Oto przykład jawnej konwersji przy użyciu CONVERT() funkcja zamiast CAST() .

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

Wynik:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

I dostosowanie czasu:

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

Wynik:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

Przykład 5 – Precyzja

data/godzina2 typ danych umożliwia określenie precyzji (do domyślnej wartości 7). Innymi słowy, nie musisz używać pełnych 7 cyfr, jeśli nie musisz.

Przykład:

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

Wynik:

+------------+------------------------+--------------------------+
| date       | datetime2(2)           | datetime2(4)             |
|------------+------------------------+--------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.00 | 2020-12-01 00:00:00.0000 |
+------------+------------------------+--------------------------+

Jedną z zalet zmniejszenia precyzji jest to, że może również zmniejszyć ilość miejsca wymaganego do przechowywania wartości. W szczególności 6 bajtów dla precyzji mniejszej niż 3, 7 bajtów dla precyzji 3 lub 4, a każda inna precyzja wymaga 8 bajtów. Należy jednak pamiętać, że pierwszy bajt jest używany do przechowywania precyzji, więc rzeczywista wartość to wskazany tutaj rozmiar pamięci plus 1 dodatkowy bajt do przechowywania precyzji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podział ciągu T-SQL na podstawie separatora

  2. Jak wybrać zagnieżdżony JSON w SQL Server za pomocą OPENJSON

  3. Nie można wstawić jawnej wartości dla kolumny tożsamości w tabeli „tabela”, gdy IDENTITY_INSERT jest ustawione na OFF

  4. Zwróć listę tabel z połączonego serwera w SQL Server (przykłady T-SQL)

  5. Dodawanie tożsamości do istniejącej kolumny