Database
 sql >> Baza danych >  >> RDS >> Database

Typ danych T-SQL Data/godzina

Wprowadzenie

Typy danych to atrybuty określające rodzaj danych, które mogą być przechowywane przez obiekty, takie jak kolumny, zmienne lokalne, wyrażenia i parametry. W świecie RDBMS typy danych są zazwyczaj pogrupowane w ciągi, numery i typy danych.

T-SQL obsługuje 6 typów danych daty i godziny, a mianowicie:

  1. Data i godzina
  2. Mała data/godzina
  3. Data
  4. Czas
  5. Data i godzina2
  6. Przesunięcie daty i godziny

Pierwsze dwa typy danych są uważane za starsze wersje nowszych. W tym artykule skupimy się na typach danych dat, a w szczególności na datetime i datetime2 typy danych dostępne w SQL Server. Tabela 1 zawiera szczegółowe informacje o różnych typach danych daty i godziny dostępnych w SQL Server.

[identyfikator tabeli=59 /]

Typy danych daty i godziny na karcie 1

Data i godzina2

Datatime to typ danych, który łączy datę z czasem w formacie 24-godzinnego zegara. Zakres dat obsługiwany w typie danych datetime jest pokazany w Tab. 1 i ma dokładność około 3 milisekund.

Datetime2 jest rozszerzeniem typu danych datetime. Obsługuje szerszy zakres możliwych wartości i ma dokładność 100 nanosekund, co jest znacznie lepszą niż jego poprzednik. Innym kluczowym aspektem typu danych dattime2 jest to, że wymagana pamięć wynosi od 6 do 8 bajtów, w zależności od wybranej precyzji.

  • Możesz osiągnąć dokładność 1 milisekundy, dopuszczając trzy miejsca po przecinku w składniku sekund. Każda wartość zajmie więc sześć bajtów.
  • Możesz osiągnąć precyzję 100 nanosekund, zezwalając na siedem miejsc po przecinku w składniku sekund. Każda wartość zużyje w ten sposób osiem bajtów.

Demonstracje

Wstaw nieprawidłowe wartości dat

Tworzymy tabelę ze szczegółami pokazanymi na Listingu 1, aby przeprowadzić kilka demonstracji, które ilustrują, jak manipulować datetime i datetime2 typy danych.

-- Listing 1 Create Table and insert Rows
-- Create Table with Data Types
use Practice2017
go
create table staffers (
fname varchar(50),
lname varchar(50),
JobTitle varchar(100),
DOB datetime,
PreciseDOB datetime2,
LastLoginTime time)
go

Następnie próbujemy wypełnić tabelę jednym wierszem, jak pokazano na Listingu 2, ale otrzymujemy błąd pokazany na Rys. 1. Słowem kluczowym w komunikacie o błędzie są wartości „poza zakresem”. Oznacza to, że jej wartość, którą próbujemy wstawić, jest albo niższa niż 01 stycznia-1753 lub wyższy niż31 grudnia-9999 . W tym przypadku problem polega na tym, że nie użyliśmy zalecanego formatu wpisu „RRRRMMDD gg:mm:ss.nnn ” (zob. tabela 1). Odczytywanie wartości „06101979 „, SQL Server zakłada, że ​​0610 to rok (odpowiadający YYYY). Ten błąd nie jest zgłaszany dla typu danych datetime2, ponieważ zakres dla datetime2 jest szerszy, począwszy od roku 0001.

-- Listing 2 Insert Rows with Wrong Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06101979'
,'06101979'
,'8:00 AM'
)

Rys. 1 Błąd zwracany dla kolumny daty i godziny

Wstaw prawidłowe wartości dat

Próbujemy rozwiązać problem, wprowadzając poprawny format wpisu dla kolumny daty i godziny, jak pokazano na Listingu 3. Po ponownym uruchomieniu instrukcji otrzymujemy błąd przedstawiony na Rys. 2. Ten błąd jest zasadniczo spowodowany tym samym nieprzestrzeganiem instrukcji specyfikacje formatu wpisu. Jednak problem tkwi w drugiej części daty „06101979 ‘, który pasuje do formatu wpisu ‘RRRRMMDD gg:mm:ss.nnn ”. W tym przypadku SQL Server założył 19 Czy miesiąc i 79 to dzień miesiąca. Próba tej niejawnej konwersji kończy się niepowodzeniem, ponieważ żadne z poprzednich stwierdzeń nie jest prawdziwe.

-- Listing 3 Insert Rows with One Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01061979'
,'8:00 AM'
)

Rys. 2 Błąd zwracany dla kolumny Datetime2

Listing 4 pozwala nam zademonstrować ostatnie twierdzenie. Wartość 01101201 mieści się w zakresie dla datetime2 i jesteśmy w stanie wstawić wiersz. Ta wartość przekłada się na 1st December 0110, jak widać na rys. 3.

-- Listing 4: Insert Rows with Correct Date Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01101201'
,'8:00 AM')
-- Listing 5: Insert Rows with All Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'19791006'
,'8:00 AM'
)

Weryfikacja danych

Rys. 3 Zapytanie o zestaw danych

Kiedy wysyłamy zapytanie do tabeli staffers, widzimy wyraźnie dokładność typu danych datetime w porównaniu z alternatywą datetime2. Przejdźmy do czegoś bardziej złowrogiego:Ustawienia języka. Spójrz na Listing 6. Wstawiamy dokładnie te same rekordy, używając formatu daty 06/10/1979 . Ten format NIE jest neutralny językowo, więc gdy ustawimy język na brytyjski w pierwszym oświadczeniu, a następnie w us_english w drugim stwierdzamy, że wstawiliśmy dwie różne daty, chociaż nasze surowe wartości są takie same. Dlatego tak ważne jest, aby zawsze używać zalecanego formatu wpisu w przypadku datetime i datetime2 .

-- Listing 6: Impact of Language Settings

set language british
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)


set language us_english
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)

Rys. 4 Pytania do personelu

Z ustawieniem języka jako brytyjski , SQL Server interpretuje pierwsze dwie cyfry jako dzień, ale z ustawieniem języka jako us_english , SQL Server interpretuje dwie pierwsze cyfry jako miesiąc. Ostatnią rzeczą, o której musimy tutaj wspomnieć, jest to, że wstawiając nasze rekordy, nie określiliśmy składnika czasu, dlatego SQL Server automatycznie przyjmuje, że była to średnia północ określonej daty.

Wniosek

W tym artykule dowiedzieliśmy się, jak wyglądają typy danych datetime i datetime2, ich kluczowe różnice oraz jak upewnić się, że wprowadzasz poprawną datę podczas korzystania z tych typów danych. W trakcie tego zbadaliśmy również dwa błędy, które programista może napotkać podczas pracy z tymi typami danych.

Referencje

  • Typy danych SQL
  • Ben-Gan, I. (2016) Podstawy T-SQL. s.74-78. Microsoft Press.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego same statystyki oczekiwania nie wystarczą

  2. Przypadek użycia dla sp_prepare / sp_prepexec

  3. Wprowadzenie do ML{.NET}

  4. Jak stworzyć indeks w Django bez przestojów?

  5. TABELA SQL