VICK Ответов: 2

Преобразование varchar в date


У меня есть данные типа "Sat, 20 февраля 2016 года" в Столбцах моей таблицы SQL, и я хотел преобразовать их в значение даты или времени в запросе.




Мне это нужно как дата или дата-время для использования в сравнительном запросе.

Требуется любая помощь/руководство.

Что я уже пробовал:

После некоторого поиска в google я все еще не могу преобразовать или привести его в нужный мне формат.

RossMW

Насколько согласован формат данных. Если он непротиворечив, вы можете разбить его на соответствующие части и вернуть в формат, который вы хотите преобразовать в поле даты.
Но если это текстовое поле ввода человека, то я не представляю себе ваших шансов, если только вы не планируете чистить данные.

VICK

Это человеческие поля ввода. :(

2 Ответов

Рейтинг:
19

OriginalGriff

В значительной степени, вы не можете - или, по крайней мере, не просто.
Проблема в том, что SQL не имеет стиля формата даты, который включает в себя день недели: Функция SQL Server CONVERT() [^] поэтому сначала вам нужно сделать несколько очень серьезных манипуляций со струнами.
Если вы снимаете день недели, это довольно просто:

CONVERT(DATE, SUBSTRING('Sat, February 20, 2016', 6 , 999), 109)
Будут делать это.
Но ... необходимость делать это обычно является признаком того, что ваш дизайн БД сильно испорчен: вы вообще не должны хранить даты в строковом формате, потому что у вас всегда возникают подобные проблемы. Я бы настоятельно посоветовал вам написать быстрое приложение, которое преобразует всю вашу БД в столбец DATETIME вместо NVARCHAR - это избавит вас от многих неприятностей в будущем.


VICK

Согласился насчет "сильно испорченного дизайна БД", но я не могу изменить схему БД, скорее используя предложенный вами ответ. Это работает. :)

Suvendu Shekhar Giri

Идеально! 5ed :)

Рейтинг:
1

Suvendu Shekhar Giri

Вы можете сделать что-то вроде следующего-

DECLARE @MyVar AS VARCHAR(50)
SET @MyVar='Sat, February 20, 2016'

SELECT RIGHT(@MyVar,LEN(@MyVar)-5)
SELECT CAST(RIGHT(@MyVar,LEN(@MyVar)-5) AS DATETIME)


Надеюсь, это поможет :)


VICK

Это работает, но предпочел ответ Гриффа, опубликованный выше..
Спасибо за ваш ответ. Мои 5+.

Suvendu Shekhar Giri

Правда, это лучший способ, чтобы сделать это.

Спасибо за голосуйте :)