2014-01-29 6 views
0

У меня проблема с получением данных, которые я бы хотел. У меня есть столбец Varchar, который состоит из различной информации. Я хотел бы извлечь дату только из этой колонки. Однако я не увенчался успехом. Я использовал следующий SQL (2008), чтобы получить данные ниже, но я не могу просто получить дату только без времени. Очевидно, что дата и время находятся в другом положении. Надеюсь, ты поможешь.Как получить дату из varchar

SELECT substring(Data, 8, 17) 
    from mastInfo 


9/25/2013 12:36:5 
Jul 8 2013 11:40 
9/25/2013 12:43:5 

ответ

3
SELECT convert(date, Case When IsDate(substring(Data, 8, 17)) = 1 
          Then substring(Data, 8, 17) 
          Else NULL END) 
from mastInfo 

Поскольку вы трогание со строкой, то возможно, что он делает не представляют действительную дату. Использование функции IsDate возвращает 1, когда строка может быть преобразована в дату. В принципе, этот код преобразует на сегодняшний день те значения, которые могут быть преобразованы, и вернет NULL для тех значений, которые не могут быть преобразованы в действительную дату.

+0

Я до сих пор получаю следующее сообщение: «Ошибка конверсии при преобразовании даты и/или времени из символьной строки. '. Я считаю, что я пробовал много способов получить эти данные, но это кажется невозможным. – user1880670

+0

Прошу прощения, но у меня была закрытая скобка в неправильном положении. Повторите попытку. –

+1

Кстати, я просто протестировал это на экземпляре SQL-2008, и он работал так, как вы этого хотели. Этот код проверяет, может ли строка быть преобразована до ее преобразования (аналогично ответу try_convert, который работает только на SQL-2012 (и выше). –

0

если вы хотите преобразовать его в использовании времени дата:

SELECT CONVERT(Datetime, '2011-09-28 18:01:00', 120) -- to convert it to Datetime 

если вы хотите получить время:

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), '2011-09-28 18:01:00', 100), 7)) 

если вы хотите часть даты:

SELECT CONVERT (DATE, GETDATE()) 
0

какая версия сервера sql?

вы можете попробовать это:

конвертируйте (дата, подстроку (Data, 8, 17)) из mastInfo

+0

Я использую SQL Server 2008. При этом, следующем возникает ошибка: «Ошибка конверсии при преобразовании даты и/или времени из символьной строки». – user1880670

+0

Звучит как проблема синтаксического анализа? Подстрока (данные, 8, 17) всегда возвращает дату? – Sprouts83

1

Если вы используете SQL Server 2012 или более поздней версии, то вы можете использовать Try_Convert().

Вот SQL Fiddle.

Вот пример (из приведенных выше SQLFiddle):

Select Try_Convert(datetime, DateAsString) As DateAsDateTime 
    ,DateAsString 
From SomeTable 

Вот результат:

DATEASDATETIME      DATEASSTRING 
September, 25 2013 12:36:05+0000 9/25/2013 12:36:5 
September, 25 2013 12:43:05+0000 9/25/2013 12:43:5 
July, 08 2013 11:40:00+0000   Jul 8 2013 11:40 
+0

Я действительно использую SQl 2008. – user1880670

0

Сначала конвертировать Varchar в DateTime и после этого снова превратить его в VARCHAR в нужном формате дата, как 101,102,103

Попробуйте это:

select convert(varchar(50),convert(datetime,'9/25/2013 12:43:5'),101) 
Смежные вопросы