SQLShack

Wprowadzenie

Częstym zadaniem dla początkujących jest nauczenie się jak wykonać SQL Convert Date i pracować nad konwersją daty do innych typów danych lub przekształceniem innych typów danych do daty.

Tutaj w tym artykule wyjaśnimy, jak pracować i konwertować daty do różnych formatów lub odwrotnie.

Wymagania

  1. Zainstalowany SQL Server. Starting in SQL Server 2008

Przykład

Pierwszy przykład będzie prosty, mamy kolumnę varchar z datą w tabeli, ale potrzebujemy przekonwertować varchar na datę. Musimy wykonać SQL convert date.

Tutaj jest skrypt do tworzenia tabeli z danymi:

1
2
3
4
5
6
7
8
9
10
11
12

CREATE TABLE .(
NOT NULL,
(100) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
) ON
GO
INSERT . (, ) VALUES (1, N’02-03-2005′)
INSERT . (, ) VALUES (2, N’03-05-2006′)
INSERT . (, ) VALUES (3, N’04-05-2011′)

Chcemy przekonwertować kolumnę data z nvarchar(100) na datę.

Aby to zrobić, spróbujemy zmodyfikować wygląd tabeli:

Spróbujemy zmienić Typ danych na smalldatetime:

Otrzymamy następujący komunikat o błędzie:

Zapisywanie zmian jest niedozwolone. Zmiany, których dokonałeś wymagają usunięcia i ponownego utworzenia następujących tabel. Albo wprowadziłeś zmiany w tabeli, której nie można ponownie utworzyć, albo włączyłeś opcję Zapobiegaj zapisywaniu zmian, które wymagają ponownego utworzenia tabeli.

Aby rozwiązać ten błąd, w SSMS przejdź do menu Narzędzia > Opcje:

W Opcjach przejdź do zakładki Projektanci >Projektanci tabel i baz danych i usuń zaznaczenie opcji Zapobiegaj zapisywaniu zmian, które wymagają ponownego utworzenia tabeli:

Ta opcja wyłączy możliwość uniemożliwienia zapisywania odtworzenia tabeli. Gdy zmodyfikujesz typ danych kolumny, wymaga to ponownego utworzenia tabeli.

Teraz możesz zapisać projekt, a Twoja tabela zostanie przekonwertowana na datę, a konwersja daty w SQL jest zakończona:

Funkcje konwersji

T-SQL zawiera funkcje do konwersji typów danych. Użyjemy CAST i CONVERT, aby wykonać SQL-ową konwersję daty.

Zacznijmy najpierw od CAST:

Jak przekonwertować z varchar, nvarchar, char, nchar na sql date używając CAST

Poniższy przykład, pokaże jak przekonwertować znaki na typ daty datetime używając funkcji CAST:

1
2

declare @vardate varchar(100)=’03-04-2016′
select CAST(@vardate AS datetime) AS dataconverted;

W przykładzie zadeklarowano zmienną o nazwie vardate, a następnie zmienna ta będąca varcharem została przekonwertowana na datetime za pomocą funkcji CAST.

Uwaga: Aby uzyskać więcej informacji na temat funkcji CAST, zapoznaj się z tym linkiem: CAST i CONVERT (Transact-SQL)

Jak zrobić SQL convert date from varchar, nvarchar, char, nchar to date using CONVERT

CONVERT jest funkcją, która może zrobić to samo, co CAST w poprzednim scenariuszu.

1
2

declare @vardate varchar(100)=’03-04-2016′
select CONVERT(datetime, @vardate) as dataconverted

Kod T-SQL robi to samo co cast, ale korzysta z funkcji CONVERT. Zaletą CONVERT jest to, że można łatwo zmienić format daty za pomocą argumentu style.

Na przykład, jeśli chcesz uzyskać datę w formacie ISO, możesz użyć następującego zdania T-SQL:

1
select CONVERT(nvarchar(30),getdate(), 121) as isoformat

Jak przekonwertować datę sql na różne formaty w T-SQL

Poniższy przykład pokazuje, jak przekonwertować format daty na różne formaty.

Dla formatu Japananes:

1
select CONVERT(nvarchar(30),getdate(), 111) as Japanformat

Dla formatu USA:

1
select CONVERT(nvarchar(30),getdate(), 110) as USAformat

Dla formatu ANSI:

1
select CONVERT(nvarchar(30),getdate(), 102) as ANSIformat

Dla formatu brytyjskiego:

1
select CONVERT(nvarchar(30),getdate(), 103) as Britishformat

Dla formatu niemieckiego:

1
select CONVERT(nvarchar(30),getdate(), 104) as Germanformat

Dla formatu włoskiego:

1
select CONVERT(nvarchar(30),getdate(), 105) as Italianformat

Dla domyślnego formatu europejskiego:

1
select CONVERT(nvarchar(30),getdate(), 113) as EuropeDefaultformat

Dla ODBC Canonical:

1
select CONVERT(nvarchar(30),getdate(), 120) as ODBCCanonicalformat

Zawsze masz możliwość użycia funkcji FORMAT, aby uzyskać datę w formacie, który chcesz:

1
SELECT FORMAT( getdate(), 'dd/MM/rr’)

FORMAT jest łatwiejszy w obsłudze dat i używaniu formatu preferowanego przez użytkownika, ponieważ nie trzeba znać stylu. Jednak z mojego doświadczenia widzę wiele kodu używającego funkcji CAST i CONVERT, więc lepiej je znać.

Uwaga: Więcej informacji na temat funkcji FORMAT można znaleźć pod tym linkiem: FORMAT (Transact-SQL)

Problemy związane z operacjami SQL convert date

Gdy próbujesz przekonwertować na datę, nie zawsze jest to możliwe. Poniższy przykład pokazuje często występujący błąd:

1
2

declare @vardate varchar(100)=’11242016′
select CONVERT(datetime, @vardate) as dataconverted

Komunikat o błędzie jest następujący:

Msg 242, Level 16, State 3, Line 22

Konwersja typu danych varchar do typu danych datetime spowodowała otrzymanie wartości spoza zakresu.

Potrzebne są separatory dla daty, takie jak „/”, „.” lub „-„.

Poniższy przykład, modyfikuje ciąg znaków z 11242016 na 11-24-2016, a następnie konwertuje do daty sql:

1
2
3
4
5

declare @vardate varchar(100)=’11242016′
set @vardate= SUBSTRING(@vardate, 1, 2)+’-’+ SUBSTRING(@vardate, 3, 2)+’-’+SUBSTRING(@vardate, 5, 4)
select CONVERT(date, @vardate) as dataconverted

Używamy substring do konkatenacji „-„, aby użyć akceptowalnego formatu daty, a następnie używamy funkcji CONVERT do konwersji znaków na datę sql.

Typy danych daty

W SQL Server istnieje kilka typów datatypów:

  • Time zwraca godziny, minuty, sekundy i nanosekundy (hh:mm:ss.nnnnnn)
  • Date zwraca rok, miesiące i dni (yyyy-mm-dd)
  • Datetime zwraca dane o takim formacie: YYYY-MM-DD hh:mm:ss
  • Smalldatetime zwraca datę z tym formatem: YYYY-MM-DD hh:mm:ss
  • Datetime2 jest podobny do Datetime, ale ma większą precyzję (YYYYY-MM-DD hh:mm:ss)
  • Datetimeoffset ma on precyzję datetime2, ale jest używany dla stref czasowych w UTC

SQL convert date to integer

Jeśli użyjesz CONVERT lub CAST do konwersji datetime na integer, zwróci on liczbę dni od 1900 do podanej daty.

Na przykład następujący kod T-SQL wyświetli liczbę dni od roku 1900 do dnia dzisiejszego:

1
SELECT CONVERT(INT, GETDATE())

Można również konwertować na liczbę całkowitą rok, miesiące, dni itd. wartości datetime. Poniższy kod pokazuje, jak przechowywać w zmiennych całkowitych dzień, miesiąc i rok wartości datetime:

1
2
3
4
5

declare @year int = year(getdate())
declare @month int = month(getdate())
declare @day int = day(getdate())
select @year as year,@month as month,@day as day

Common Questions about SQL convert date in SQL Server

Uwaga: Poniższy link zawiera FAQ na temat funkcji i dat w SQL Server: FAQ about Dates in SQL Server

Podsumowanie

W tym artykule dowiedzieliśmy się jak wykonać SQL convert date w SQL Server. Dowiedzieliśmy się jak modyfikować typ danych w tabeli, jak używać funkcji CAST, CONVERT i FORMAT. Poznaliśmy również różne rodzaje typów danych SQL.

  • Autor
  • Recent Posts
Daniel Calbimonte jest Microsoft Most Valuable Professional, Microsoft Certified Trainer i Microsoft Certified IT Professional for SQL Server. Jest uznanym autorem SSIS, nauczycielem w Akademiach IT i ma ponad 13 lat doświadczenia w pracy z różnymi bazami danych. Pomaga również w tłumaczeniu artykułów SQLShack na język hiszpański
View all posts by Daniel Calbimonte

Latest posts by Daniel Calbimonte (see all)
  • Pytania na rozmowę kwalifikacyjną SQL – 3 września, 2020
  • Certyfikacje SQL – 7 sierpnia 2020
  • Historia TSQL – 3 września 2019

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.