Dziwię się, że nie mogę już tutaj znaleźć tego pytania.
Mam zmienną datę i godzinę i chcę przekonwertować ją na ciąg, aby móc dołączyć ją do innego ciągu. Chcę, aby był w formacie, który można łatwo przekonwertować z powrotem na datę.
Jak mogę to zrobić?
(Chcę część daty i część czasu.)
sql-server
tsql
cja
źródło
źródło
Convert
, kliknij dwukrotnie, aby podświetlić, naciśnij Shift + F1 ... zawsze pierwsza linia obrony.Odpowiedzi:
Następujące zapytanie pobierze bieżącą datę i godzinę i przekształci je w ciąg. z następującym formatem
yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
źródło
DateTimeOffSet
pamiętaj o dostosowaniuvarchar
długości do tego, jak chcesz, aby wyglądał wynik. Dla mnie nie chciałem strefy czasowej, więc musiałem użyćSELECT convert(varchar(19), sysdatetimeoffset(), 120)
Istnieje wiele różnych sposobów na na sznurku. Oto jeden sposób:
convert
datetime
SELECT convert(varchar(25), getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm
Zobacz Demo
Oto witryna zawierająca listę wszystkich konwersji:
Jak sformatować datę i godzinę w programie SQL Server
źródło
Możesz użyć
convert
instrukcji w Microsoft SQL Server, aby przekonwertować datę na ciąg. Przykład zastosowanej składni to:SELECT convert(varchar(20), getdate(), 120)
Powyższe zwróci bieżącą datę i godzinę w postaci ciągu o formacie
YYYY-MM-DD HH:MM:SS
24-godzinnym.Możesz zmienić liczbę na końcu instrukcji na jedną z wielu, co spowoduje zmianę formatu zwracanych ciągów. Listę tych kodów można znaleźć w witrynie MSDN w sekcji dotyczącej RZUTOWANIA i KONWERTU .
źródło
Istnieją 3 różne metody w zależności od moich wymagań i używanej wersji.
Oto metody ...
1) Korzystanie z programu Convert
DECLARE @DateTime DATETIME = GETDATE(); --Using Convert SELECT CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime' ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate' ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'
2) Korzystanie z Cast (SQL Server 2008 i nowsze)
SELECT CAST(@DateTime AS DATETIME2) AS 'myDateTime' ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision' ,CAST(@DateTime AS DATE) AS 'myDate' ,CAST(@DateTime AS TIME) AS 'myTime' ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'
3) Korzystanie ze znaków o stałej długości
DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120); DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120); SELECT @myDateTime AS 'myDateTime' ,@myDate AS 'myDate'
źródło
Oprócz funkcji
CAST
iCONVERT
opisanych w poprzednich odpowiedziach, jeśli używasz programu SQL Server 2012 i nowszych wersji, możesz użyć funkcji FORMAT, aby przekonwertowaćDATETIME
typ oparty na ciąg.Aby przekonwertować z powrotem, użyj odwrotnego
PARSE
lubTRYPARSE
funkcji.Style formatowania są oparte na platformie .NET (podobnie jak opcje formatowania ciągów w metodzie ToString ()) i mają tę zaletę, że są świadome kultury. na przykład.
DECLARE @DateTime DATETIME2 = SYSDATETIME(); DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') SELECT @DateTime SELECT @StringResult1, @StringResult2 SELECT PARSE(@StringResult1 AS DATETIME2) SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')
Wyniki:
źródło
The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
Sprawdź składnię CAST i CONVERT t-sql:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
źródło
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'
101 - USA - MM / DD / RRRR
108 - Czas - HH: MI: SS
112 - Data - RRRRMMDD
121 - ODBC - RRRR-MM-DD HH: MI: SS.FFF
20 - ODBC - RRRR-MM-DD GG: MI: SS
źródło
Wiele osób odpowiedziało na to pytanie, ale wydaje mi się, że pominięto najprostsze rozwiązanie.
SQL SERVER (wierzę, że 2012+) ma niejawne odpowiedniki ciągów dla DATETIME2, jak pokazano tutaj
Zapoznaj się z sekcją „Obsługiwane formaty literałów ciągu dla datetime2”
Aby jednoznacznie odpowiedzieć na pytanie dotyczące PO:
DECLARE @myVar NCHAR(32) DECLARE @myDt DATETIME2 SELECT @myVar = @GETDATE() SELECT @myDt = @myVar PRINT(@myVar) PRINT(@myDt)
wynik:
Uwaga: Pierwsza zmienna (
myVar
) w rzeczywistości również przechowuje wartość'2019-01-23 12:24:00.0000000'
. Po prostu zostaje sformatowany zJan 23 2019 12:24PM
powodu domyślnego formatowania ustawionego dla usługi SQL SERVER, która jest wywoływana, gdy używaszPRINT
. Nie daj się tutaj zwieść, rzeczywisty ciąg w(myVer)
='2019-01-23 12:24:00.0000000'
źródło
Spróbuj poniżej:
DECLARE @myDateTime DATETIME SET @myDateTime = '2013-02-02' -- Convert to string now SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
źródło