Database
 sql >> база данни >  >> RDS >> Database

T-SQL Тип данни за дата и време

Въведение

Типовете данни са атрибути, които определят вида данни, които обекти като колони, локални променливи, изрази и параметри могат да задържат. В света на RDBMS типовете данни обикновено се групират в низови, числови и типове данни за дата.

T-SQL поддържа 6 типа данни за дата и час, а именно:

  1. Дата и час
  2. Smalldatetime
  3. Дата
  4. Време
  5. Дата и час2
  6. Изместване на датата и времето

Първите два типа данни се считат за наследени версии на по-новите. В тази статия се фокусираме върху типовете данни за дата и по-специално върху datetime и дата и час2 типове данни, налични в SQL Server. Таблица 1 дава подробности за различните типове данни за дата и час, налични в SQL Server.

[table id=59 /]

Раздел 1 Типове данни за дата и час

Дата и час2

Datatime е тип данни, който комбинира дата с време в 24-часов формат на часовника. Периодът от време, поддържан в типа данни дата и час, е както е показано в раздел 1 и има точност от около 3 милисекунди.

Datetime2 е разширение на типа данни datetime. Той приема по-широк диапазон от възможни стойности и има точност от 100 наносекунди, което е много по-добро от своя предшественик. Друг ключов аспект на типа данни dattime2 е, че необходимото съхранение варира от 6 до 8 байта в зависимост от избраната от вас прецизност.

  • Можете да постигнете точност от 1 милисекунда, като разрешите три знака след десетичната запетая на компонента за секунди. Така всяка стойност ще консумира шест байта.
  • Можете да постигнете точност от 100 наносекунди, като разрешите седем знака след десетичната запетая на компонента за секунди. Така всяка стойност ще консумира осем байта.

Демонстрации

Вмъкнете грешни стойности за дата

Създаваме таблица с подробностите, показани в листинг 1, за да извършим няколко демонстрации, които илюстрират как да манипулирате datetime и дата и час2 типове данни.

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

След това се опитваме да попълним таблицата с един ред, както е показано в листинг 2, но получаваме грешката, показана на фиг. 1. Ключовата дума в съобщението за грешка е стойности „извън обхвата“. Това, което казва, е, че нейната стойност, която се опитваме да вмъкнем, е или по-ниска от 01-Jan-1753 или по-висока от31-Dec-9999 . В този случай проблемът е, че не сме използвали препоръчания формат за въвеждане на „ГГГГММДД чч:мм:сс.nnn “ (виж Таблица 1). Четене на стойността „06101979 “, SQL Server приема, че 0610 е годината (съвпадаща с ГГГГ). Тази грешка не се извежда за типа данни datetime2, тъй като диапазонът за datetime2 е по-широк от годината 0001.

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

Фиг. 1 Върната грешка за колона Datetime

Вмъкнете правилни стойности за дата

Опитваме се да коригираме проблема, като въвеждаме правилния формат за въвеждане на колоната за дата и час, както е показано в листинг 3. Когато стартираме оператора отново, получаваме грешката, показана на фиг. 2. Тази грешка по същество е причинена от същата грешка при следване спецификациите на формата за влизане. Проблемът обаче е в другата част от датата „06101979 ‘, който съвпада с формата за въвеждане „ГГГГММДД чч:мм:сс.nnn ’. В този случай SQL Server приема 19 Е месец и79 е ден от месеца. Опитът за това имплицитно преобразуване е неуспешен, тъй като нито едно от предходните твърдения не е вярно.

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

Фиг. 2 Върната грешка за колона Datetime2

Списък 4 ни позволява да демонстрираме последното твърдение. Стойността 01101201 се вписва в диапазона за datetime2 и можем да вмъкнем реда. Тази стойност се превежда на 1 декември 0110, както виждаме на фиг. 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'
)

Проверка на данните

Фиг. 3 Запитване на набора от данни

Когато правим заявка към таблицата на служителите, виждаме ясно прецизността на типа данни datetime в сравнение с алтернативата datetime2. Нека да преминем към нещо малко по-зловещо:Езикови настройки. Разгледайте листинг 6. Вмъкваме точно същите записи, използвайки формата на датата 10.06.1979 . Този формат НЕ е езиково неутрален, следователно, когато задаваме език на британски в първото изявление и след това към us_english във втория откриваме, че всъщност сме вмъкнали две различни дати, въпреки че нашите необработени стойности са еднакви. Ето защо е толкова важно винаги да използвате препоръчания формат за въвеждане, когато работите с datetime и дата и час2 .

-- 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'
)

Фиг. 4 Запитване на служители

С езиковата настройка като британски , SQL Server интерпретира първите две цифри като ден, но с езиковата настройка като us_english , SQL Server интерпретира първите две цифри като месец. Последното нещо, което трябва да споменем тук, е, че при вмъкването на нашите записи не сме посочили компонента за време, така че SQL Server автоматично приема, че е средна полунощ на посочената дата.

Заключение

В тази статия научихме как изглеждат типовете данни datetime и datetime2, техните ключови разлики и как да се уверим, че въвеждате правилната дата, когато използвате тези типове данни. В хода на това ние също така разгледахме две грешки, които разработчикът може да срещне, когато работи с тези типове данни.

Препратки

  • Типове данни за SQL
  • Бен-Ган, И. (2016) Основи на T-SQL. стр. 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. Значението на избора на правилния размер на Azure VM

  2. Използване на данни, защитени с персонализирано хранилище за ключове от Linux

  3. Система за автоматично изпращане на имейл за изпращане на обобщен отчет на базата данни

  4. Непредвидени странични ефекти – сесии за сън, задържащи ключалки

  5. Свързване на SAS JMP към Salesforce.com