2015-12-01 2 views
2

У меня возникли проблемы с преобразованием NVARCHAR(MAX) в тип данных DateTime. Я проверил нули и пустые места. Я не уверен, почему он не конвертируется. Может быть, из-за того, что у них сейчас есть данные. Если бы кто-нибудь мог сказать мне, что я должен изменить, чтобы он работал.Преобразование Nvarchar (MAX) в DATETIME Тип данных SQL Server запрос

DateStamp 
------------------ 
2015-10-1413:09:17 
2015-10-1413:09:17 
2015-10-1413:09:19 
2015-10-1413:09:22 
2015-10-1413:09:23 
2015-10-1413:09:27 
2015-10-1413:09:27 

DateStamp - столбец, как вы можете видеть. Есть ли места, которые нужно положить или есть что-то еще, что мне нужно изменить?

+1

Im в бит нового для SQL и данные, которые я получил, были из текстового файла, поэтому для его первого запуска я сделал его «NVARCHAR (Max)», а затем манипулировал им с тем, что мне нужно. Я не эксперт, но я стараюсь изо всех сил. –

ответ

2

У ваших NVARCHAR(MAX) строк нет места. Например '2015-10-1413:09:17' должен быть '2015-10-14 13:09:17'

Как заявить, что это не будет работать при преобразовании в DATETIME:

DECLARE @date NVARCHAR(MAX) = '2015-10-1413:09:17' 
BEGIN 
    SELECT CAST(@date as datetime) 
    SELECT CONVERT(datetime,@date) 
END 

Конверсия удалось при преобразовании даты и/или времени из символов строки.

Предполагая, что вы всегда будете получать эту DATESTAMP строку в том же формате, вы можете использовать SUBSTRING добавить требуемое пространство в строку, а затем преобразовать его в DATETIME:

DECLARE @date NVARCHAR(MAX) = '2015-10-1413:09:17' 
BEGIN 
SELECT (SUBSTRING(@date,1,10)+' '+SUBSTRING(@date,11,15)) as FormattedDate -- 2015-10-14 13:09:17 
SELECT CONVERT(datetime,(SUBSTRING(@date,1,10)+' '+SUBSTRING(@date,11,15))) 
END -- Returns : 2015-10-14 13:09:17.000 
+1

Как я уже упоминал об удаленном ответе Galma, SQL Server иногда может обрабатывать данные даты и времени, разделенные пробелами, как если бы часть даты была YYYY-DD-MM и поэтому все равно не могла конвертировать эти данные. Использование 'T' в качестве разделителя вместо этого никогда не является двусмысленным. –

+1

Я думаю, что использование метки времени ODBC - это хороший способ сделать это, то есть SELECT CONVERT (datetime, {ts '2015-10-14 13:09:17'}) –

+0

i AM CRYING OF JOY !!! lol Огромное вам спасибо! –

Смежные вопросы