Jak przekonwertować string do daty T-SQL?

Jak mogę przekonwertować Łańcuch znaków na datę w T-SQL?

Moim przypadkiem testowym jest ciąg znaków: '24.04.2012'

Author: Philip Raath, 2012-04-24

6 answers

CONVERT(datetime, '24.04.2012', 104)
Powinno wystarczyć. Zobacz tutaj, aby uzyskać więcej informacji: " CAST and CONVERT (Transact-SQL)"
 113
Author: Chris Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 11:30:24

Formaty daty Microsoft SQL

CONVERT(DateTime, DateField, 104)
 24
Author: therealmitchconnors,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-24 19:26:12

Oto rozwiązanie, które działa dobrze. Podstawowe polecenie Zawiera in-line try-parse:

SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;

Oto co zaimplementowaliśmy w wersji produkcyjnej:

UPDATE dbo.StagingInputReview
 SET ReviewedOn = 
     ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
 ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
 -- Check for empty/null/'NULL' text
 WHERE not ReviewedOnText is null 
   AND RTrim(LTrim(ReviewedOnText))<>''
   AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';

Kolumny ModifiedOn i ModifiedBy służą tylko do śledzenia wewnętrznej bazy danych.

Zobacz także te odwołania do Microsoft MSDN:

 12
Author: MAbraham1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-10 15:18:21

Chociaż konwerter działa, nie powinieneś go używać. Powinieneś zadać sobie pytanie, dlaczego parsujesz wartości łańcuchowe w SQL-Server. Jeśli jest to zadanie jednorazowe, w którym ręcznie naprawiasz niektóre dane, nie otrzymasz tych danych innym razem, jest to w porządku, ale jeśli jakakolwiek aplikacja używa tego, powinieneś coś zmienić. Najlepszym sposobem byłoby użycie typu danych "date". Jeśli jest to wejście użytkownika, jest jeszcze gorzej. Następnie należy najpierw sprawdzić w kliencie. Jeśli naprawdę chcesz zdać wartości łańcuchowe, gdzie SQL-Server oczekuje daty, zawsze można użyć formatu ISO ('YYYYMMDD') i powinien on konwertować się automatycznie.

 7
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 17:18:03

Możesz użyć:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date

Odniesienie: CAST and CONVERT (Transact-SQL)

 3
Author: Seann Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-08 01:36:56
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

Zrobi to, co jest potrzebne, wynik:

2012-04-24 00:00:00.000
 0
Author: JMMS Karunarathne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-30 03:53:23