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.
Почему вы преобразовываете varchar снова в varchar? Convert (дата, @ дата, 106) не работает? – Mukund
Вам не нужно преобразовывать varchar в дату при вставке в db. Он будет автоматически обрабатываться db. INSERT INTO MyTable (createdDate) Значения ('dd/mm/yyyy') и сервер sql выяснят это для вас. – jadavparesh06
перейдите по ссылке http://stackoverflow.com/questions/5287427/how-to-insert-datetime-into-the-sql-database-table – jadavparesh06