/ / Różnica między analizą składni i konwersją w programie SQL Server - sql, tsql, sql-server-2012

Różnica między analizą składni i konwersją w SQL Server - sql, tsql, sql-server-2012

Mam takie zapytanie

SELECT ISDATE("18 Mar 2016 18:57:35 GMT");

I zwraca oczywiście 0, ponieważ ciąg nie jest prawidłowym formatem daty i ponownie z tego samego powodu, gdy uruchamiam

SELECT CONVERT(DATETIME, "18 Mar 2016 18:57:35 GMT")

Pojawia się błąd:

Konwersja nie powiodła się podczas konwersji daty i / lub czasu z ciągu znaków.

Ale nie rozumiem, dlaczego mogę zrobić to samo PARSE funkcjonować.

SELECT PARSE("18 Mar 2016 18:57:35 GMT" AS DATETIME )

dostaję 2016-03-18 14:57:35.000 jako wynik.

Czy ktoś może mi powiedzieć, jak PARSE i CONVERT są różne i dlaczego mogę uruchomić zapytanie PARSE a nie z CONVERT? Dzięki

Odpowiedzi:

6 dla odpowiedzi № 1

Funkcja PARSE jest nowa w SQL Server 2012 ikorzysta z .NET CLR - to nie jest natywny T-SQL, podczas gdy funkcja CONVERT jest natywnym T-SQL. Podczas korzystania z funkcji PARSE może wystąpić pewien narzut wydajności, a także zależy od obecności .NET CLR w bazie danych serwer.

Cytat z http://sqlhints.com/tag/convert-vs-parse/ :

Funkcja PARSE z powodzeniem konwertujeciąg „Sobota, 08 Czerwiec 2013 r., Ale funkcja KONWERSJA nie przekonwertowała pliku ta sama wartość. To jest funkcja PARSE stara się przekonwertować wprowadź wartość ciągu do żądanego typu, ale funkcja CONVERT wymaga dokładnego formatu ciągu wejściowego, niedozwolone są odmiany.

Sprawdź artykuł, aby uzyskać więcej informacji: http://sqlhints.com/tag/convert-vs-parse/


0 dla odpowiedzi nr 2
DECLARE @DATE VARCHAR(30)="18 Mar 2016 18:57:35 GMT"
SELECT  CONVERT(DATETIME,REPLACE(@DATE,"GMT",""))
PRINT @DATE

Ponieważ tutaj ciąg GMT nie może zostać przekonwertowany na format daty i godziny przy użyciu CONVERT()