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 № 1Funkcja 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()