2015-10-27 2 views
1

У меня есть varchar, который является 8-значным числом, и мне нужно преобразовать в datetime. Производственный номер - это автоматически сгенерированный номер с момента размещения заказа. Например, серийный номер 10090203 - это дата-время 2015-10-09 02:03:00. Мне нужно указать список чисел varchar в datetime, чтобы я мог перекрестно сравнить его со списком дат. Вот как я конвертирую datetime в varchar, но я не уверен, как идти наоборот.Ввести различные части varchar в дату, SQL

SELECT RIGHT('0' + CAST(DATEPART(M, table1.coldatetime) AS varchar), 2) 
+ RIGHT ('0' + Cast(DATEPART(DD, table1.coldatetime) AS varchar), 2) 
+ RIGHT('0' + CAST(DATEPART(HH, table1.coldatetime) AS varchar), 2) 
+ RIGHT('0' + CAST(DATEPART(MINUTE, table1.coldatetime) AS varchar), 2) 
AS 'CreatedNumber' FROM table1 
+0

Вы позволили изменить DDL? Я имею в виду, все хорошо и полезно использовать время даты как часть идентификатора, но почему бы не сохранить фактическую дату и время как дату и время в одной таблице? (После того, как я подумал: я вижу, что вы уже с холодным временем. Так почему вы не можете просто использовать это?) – cobaltduck

+0

В настоящее время мы делаем множество обновлений программного обеспечения, чтобы попытаться переместить все в datetime, чтобы избавиться от записей varchar , из-за того, что они не включают год, и у нас в конечном итоге будут дубликаты, но эти таблицы невероятно длинны, и мы не хотим иметь 2 столбца, посвященных одной и той же информации. Особенно, если один столбец в конечном итоге отобразит дубликаты, потому что ему не хватает года. Кроме того, поля типа varchar имеют очень старые таблицы данных, прежде чем у нас даже был SQL-сервер. Они были в магазинах в программе доступа, и теперь мы переходим на vb.net. – Cheddar

+0

@Чеддар - Как вы хотите выбрать год? – Adish

ответ

2

Это должно работать для вас:

SELECT 
    DATEADD(mi,CAST(SUBSTRING(table1.coldatetime,7,2) AS INT),DATEADD(hour,CAST(SUBSTRING(table1.coldatetime,5,2) AS INT),CONVERT(datetime,'2015' + LEFT(table1.coldatetime,2)+SUBSTRING(table1.coldatetime,3,2)))) 
FROM 
    table1 
0
Select 
STR_TO_DATE(CONCAT('2015',coldatetime,'00'),'%y','%m','%d','%H','%i','%s') 
From Table1 
Смежные вопросы