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

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

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

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

Istnieją jednak przypadki, w których data do smalldatetime konwersja może się nie powieść. W szczególności, jeśli data wartość jest poza zakresem obsługiwanym przez smalldatetime wtedy zawiedzie z błędem.

W każdym razie poniżej znajdują się przykłady konwersji między tymi dwoma typami danych.

Przykład 1 – Konwersja niejawna

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

DECLARE @thedate date, @thesmalldatetime smalldatetime
SET @thedate = '2020-12-01'
SET @thesmalldatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thesmalldatetime AS 'smalldatetime';

Wynik:

+------------+---------------------+
| date       | smalldatetime       |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 00:00:00 |
+------------+---------------------+

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 smalldatetime zmienna.

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

Podczas konwersji między datą i smalldatetime , składnik czasu jest ustawiony na 00:00:00 . Zapewnia to dokładność co do minuty.

Powodem, dla którego wszystkie są zerami, jest to, że wartość daty nie zawiera żadnych informacji o czasie, więc SQL Server nie ma możliwości dowiedzenia się, o której godzinie chcesz (jeśli w ogóle).

Oczywiście otrzymasz ten wynik, nawet jeśli po prostu przypiszesz wartość zawierającą tylko datę do smalldatetime bez wykonywania konwersji:

DECLARE @thesmalldatetime smalldatetime = '2020-12-01'
SELECT @thesmalldatetime AS 'smalldatetime';

Wynik:

+---------------------+
| smalldatetime       |
|---------------------|
| 2020-12-01 00:00:00 |
+---------------------+

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, @thesmalldatetime smalldatetime
SET @thedate = '2020-12-01'
SET @thesmalldatetime = @thedate
SET @thesmalldatetime = DATEADD(hour, 7, @thesmalldatetime)
SELECT 
  @thedate AS 'date',
  @thesmalldatetime AS 'smalldatetime';

Wynik:

+------------+---------------------+
| date       | smalldatetime       |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 07:00:00 |
+------------+---------------------+

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 smalldatetime .

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

Wynik:

+------------+---------------------+
| date       | smalldatetime       |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 00:00:00 |
+------------+---------------------+

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, 7, CAST(@thedate AS smalldatetime)) AS 'smalldatetime';

Wynik:

+------------+---------------------+
| date       | smalldatetime       |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 07:00:00 |
+------------+---------------------+

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(smalldatetime, @thedate) AS 'smalldatetime';

Wynik:

+------------+---------------------+
| date       | smalldatetime       |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 00:00:00 |
+------------+---------------------+

I dostosowanie czasu:

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

Wynik:

+------------+---------------------+
| date       | smalldatetime       |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 07:00:00 |
+------------+---------------------+

Przykład 5 – Błąd poza zakresem

Jak wspomniano, jeśli data wykracza poza zakres obsługiwany przez smalldatetime typ danych, pojawi się błąd.

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

Wynik:

The conversion of a date data type to a smalldatetime data type resulted in an out-of-range value.

smalldatetime typ danych obsługuje tylko zakresy dat od 1900-01-01 do 2079-06-06.

Ponadto smalldatetime typ danych obsługuje tylko zakresy czasu od 00:00:00 do 23:59:59, więc jeśli spróbujesz użyć wartości spoza tego zakresu (na przykład z większą precyzją), również wystąpi błąd.

Przykład:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(nanosecond, 7, CAST(@thedate AS smalldatetime)) AS 'smalldatetime';

Wynik:

The datepart nanosecond is not supported by date function dateadd for data type smalldatetime.

Jednak w tym przypadku nie jest to błąd podczas konwersji, w rzeczywistości jest to błąd podczas korzystania z DATEADD() funkcja (ponieważ funkcja nie pozwala na użycie tej konkretnej części daty w smalldatetime typ danych).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. to_sql pyodbc pole licznika nieprawidłowe lub błąd składni

  2. Jak sprawdzić, które zamki trzymane są na stole

  3. Przykłady SIN() w SQL Server

  4. Skutecznie rozwiąż problem z bazą danych SQL Server utknął w trybie podejrzanym

  5. Logowanie nie powiodło się dla użytkownika „DOMAIN\MACHINENAME$”