Suvendu Shekhar Giri
Вы можете использовать LEFT()
и RIGHT()
так поступать.
Пример:
declare @test varchar(30)
set @test='1160119104041'
select '20'+left(right(@test,LEN(@test)-1),2)+'-'+left(right(@test,LEN(@test)-3),2)+'-'+left(right(@test,LEN(@test)-5),2)+' '+left(right(@test,LEN(@test)-7),2)+':'+left(right(@test,LEN(@test)-9),2)+':'+left(right(@test,LEN(@test)-11),2)
Возможно, вы захотите бросить его на
DATETIME
с помощью
CAST(expressio AS DATETIME)
.
Примечание: это просто способ. Вы все еще можете искать лучшие варианты или предложения.
Возможно, Вам также нужно подумать, что делать, если год 98, и вы хотите, чтобы это был 1998!
Надеюсь, это поможет :)
Обновление
Вы можете создать такую функцию, как -
CREATE FUNCTION GetDateFromVarchar
(
@InputValue VARCHAR(30)
)
RETURNS DATETIME
AS
BEGIN
DECLARE @ReturnValue VARCHAR(30)
SELECT @ReturnValue= '20'+LEFT(RIGHT(@InputValue,LEN(@InputValue)-1),2)+'-'+LEFT(RIGHT(@InputValue,LEN(@InputValue)-3),2)+'-'+LEFT(RIGHT(@InputValue,LEN(@InputValue)-5),2)+' '+LEFT(RIGHT(@InputValue,LEN(@InputValue)-7),2)+':'+LEFT(RIGHT(@InputValue,LEN(@InputValue)-9),2)+':'+LEFT(RIGHT(@InputValue,LEN(@InputValue)-11),2)
RETURN CAST(@ReturnValue AS DATETIME)
END
GO
Примечание:не рекомендуется копировать код вставки. Проверьте и измените в соответствии с вашими потребностями. Я еще не проверял это, но должно сработать.
Faran Saleem
Извините меня за то, что были некоторые значения, длина которых была меньше 13, и поэтому он бросал эту ошибку..но я просто проверил ее на столбце даты, где есть только дата, а не время.. например, 1160119.. и он возвращает такие значения, как 20.1-60-12