2014-10-13 7 views
0

Как преобразовать, например, ddmmyyyy, который является форматом varchar (8) в дату (dd/mm/yyyy)?конвертировать varchar (ddmmyyyy) в формат даты

У меня есть хранимая процедура, которая принимает параметр даты varchar (8).

Я хочу преобразовать его в формат даты перед вставкой в ​​базу данных. Я пытался использовать

INSERT INTO mytable(createdDate) VALUES (CONVERT(date, CONVERT(varchar(8), @date), 106)); 

ошибку:

Conversion failed when converting date and/or time from character string. 

createdDate колонка Тип: Дата

+0

Почему вы преобразовываете varchar снова в varchar? Convert (дата, @ дата, 106) не работает? – Mukund

+1

Вам не нужно преобразовывать varchar в дату при вставке в db. Он будет автоматически обрабатываться db. INSERT INTO MyTable (createdDate) Значения ('dd/mm/yyyy') и сервер sql выяснят это для вас. – jadavparesh06

+0

перейдите по ссылке http://stackoverflow.com/questions/5287427/how-to-insert-datetime-into-the-sql-database-table – jadavparesh06

ответ

2

ddmmyyyy не допустимый формат даты. Вы должны сначала сделать эту строку во что-то, что можно разобрать как DATE/DATETIME. Самый быстрый способ - просто SUBSTRING штук в формате mm/dd/yyyy. Это успешно конвертируется. Но у вас есть VARCHAR(8). Таким образом, вам нужно либо увеличить его до VARCHAR(10) (или еще лучше, только CHAR(10)), либо объявить локальную переменную для хранения измененного значения.

Например:

DECLARE @Date VARCHAR(8); -- input parameter 
SET @Date = '25032014'; 

DECLARE @Date2 CHAR(10); 
SET @Date2 = SUBSTRING(@Date, 3, 2) 
      + '/' + SUBSTRING(@Date, 1, 2) 
      + '/' + SUBSTRING(@Date, 5, 4); 

SELECT @Date2, CONVERT(DATE, @Date2); 
-- 03/25/2014  2014-03-25 

EDIT: На самом деле, я нашел несколько более простой способ. Я начал с этого метода, но понял, что он не работает с ddmmyyyy, а не mmddyyyy. Я как-то пропустил, что был подходящий номер стиля даты для dd/mm/yyyy. Таким образом, просто добавление двух слэшей к входящей строке, а затем вызов CONVERT действительно работает, но только если вы используете 103 как «стиль». И, как и первое решение, требуется либо изменить входящий параметр VARCHAR(10), либо CHAR(10) вместо VARCHAR(8), либо создать локальную переменную CHAR(10).

DECLARE @Date VARCHAR(8); -- input parameter 
SET @Date = '25032014'; 

DECLARE @Date2 CHAR(10); 
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/'); 

SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy 
-- 25/03/2014  2014-03-25 

преобразования "стили" можно найти на странице MSDN для CAST and CONVERT.

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