2014-01-02 4 views
1

Я относительно новичок в SQL Server, поэтому мне было интересно, как преобразовать тип данных из varchar в формат date? У меня есть несколько тысяч записей, поэтому мне нужен запрос, чтобы помочь преобразовать varchar в date в одном запросе.Преобразование Varchar в Date в типе данных

У меня есть дата в следующем формате: yyyymmdd, в varchar(8), и я хочу, чтобы преобразовать это в yyyymmdd в формате date.

Есть ли какие-либо вопросы, которые помогут мне с этим?

+0

Параметр 'date' тип данных не имеет никакого * формат * - это просто 5-байтовый двоичный стоимость. –

ответ

1

Просто используйте этот ВСТРОЕННЫЙ CONVERT функции, и проверить этот Link для форматирования дат

-- Use 101 if you have divider in your date 
SELECT convert(datetime, '2014-01-02',101) as [DateTime] 

-- Use 112 if you don't have divider in your date 
SELECT convert(datetime, '20140131',112) as [DateTime] 

Отредактировано:

UPDATE yourTable SET field = convert(datetime, 'yourFieldName',112) 
--This will update all of your field regardless of any particular row 
--If you want to update any particular set of rows use `WHERE` clause 

, если у вас есть больше различных форматов Гото к данной ссылке.

+0

Почему 101? Он явно хочет yyyyMMdd, который составляет 112. –

+0

Я думал, что он, возможно, пропустил, но оба предоставлены сейчас – Kirk

+0

@Kirk Привет, у меня есть тысячи плюсовых записей, ваш запрос выше может помочь мне сделать 1 к 1, мне нужен запрос все сразу и обновить их? есть ли у вас хорошие предложения? Спасибо – user3146242

1

Для различных преобразований между VARCHAR и DATETIME см. this link.

На самом деле в вашем случае, так как ваш VARCHAR в формате ГГГГММДД, вы могли бы просто:

convert(datetime, YourVarcharDateField, 112) 
+0

Я пробовал с этим запросом, но он не может работать на моем сервере sql, есть ли у вас какие-либо другие хорошие предложения? – user3146242

+0

Какая ошибка вы получаете? –

+0

это ошибка 'Msg 241, Level 16, State 1, Line 2 Конверсия не удалась при преобразовании даты и/или времени из символьной строки.' – user3146242

0
ALTER TABLE [dbo].[table] ADD ConvertedDate Date 
UPDATE [dbo].[SysData] SET ConvertedDate = CAST(VarCharDate as Date) 
ALTER TABLE [dbo].[table] DROP COLUMN VarCharDate 
+2

Что касается SQL Server ** 2008 ** и новее, я бы рекомендовал использовать «DATE», если у вас есть только дата (нет времени), или «DATETIME2 (x)», если вам нужна дата и время. Избегайте 'DATETIME' - он устарел и имеет слабые места (например, точность 3,33 мс) –

+0

@mr_eclair Я попытался с этим запросом, но он не может работать на моем сервере sql, есть ли у вас какие-либо другие хорошие предложения? – user3146242

0

типы данных могут быть преобразованы, явно или неявно. Неявные преобразования не отображаются для пользователя. SQL Server автоматически преобразует данные из одного типа данных в другой. Например, когда smallint сравнивается с int, smallint неявно преобразуется в int до продолжения сравнения.

Явные преобразования используют функции CAST или CONVERT.

отлитого и преобразовывать функции преобразования значения (локальная переменная, столбец, или другое выражение) из одного типа данных в другой

convert(datetime, '2013-05-04',101) 

CAST (expression AS data_type) 
+0

У меня есть записи с тысячами плюсов, ваш запрос выше может помочь мне сделать 1 на 1, мне нужен запрос, чтобы сделать все сразу и обновить их? есть ли у вас хорошие предложения? Спасибо – user3146242

0

Использование CASTORCONVERT функции для преобразования строки на сегодняшний день

Try это:

ИЛИ

SELECT CONVERT(DATE, '20140102', 112) AS convertedDate; 
SELECT CONVERT(DATE, colName, 112) AS convertedDate FROM tableA; -- Replace column name and table name 

ВЫВОД обоих запросов:

|convertedDate| 
|-------------| 
|2014-01-02 | 
+0

Привет, У меня есть записи с тысячами плюсов, ваш запрос выше может помочь мне сделать 1 на 1, мне нужен запрос, чтобы сделать все сразу и обновить их? есть ли у вас хорошие предложения? Спасибо – user3146242

+0

@ user3146242 Я только что привел пример. С помощью этой функции вы можете конвертировать все записи –

+0

@ user3146242 Проверьте мой обновленный ответ. Это будет сделано для всех записей в таблице –

0

В SQL SERVER, существует два типа встроенных в методах преобразования.

  1. Преобразование
  2. В ролях

Преобразовать имеет свои собственные значения по умолчанию, так что устареет в обновленной версии SQL SERVER лучше использовать технику CAST преобразования

В вашем scenario.Already имея дату с типом данных Varchar (8), пытающихся преобразовать в Date

Решите в систематическом виде.

Добавление новой колонки в существующую таблицу.

Alter Table Table_name Add changedDataTypeDate Date 

Обновление значения в VARCHAR типа данных в актуальном состоянии DATATYPE

UpDate Table_name Set ChangedDataTypeDate = CAST(OriginalDataTypeDate as Date) 

снова изменить имя нового столбца в старое имя столбца.

sp_rename 'Tablename.changedDataTypeDate', 'OriginalDataTypeDate', 'COLUMN'

его сделали.

Основано на требованиях u r.

Alter Table customer Add Purchase_Changedtype Date 
Update Customer set Purchase_changedtype = CAST(Purchase_date as Date) 

(Если и нужно время также заменить Datetime istead от даты)

Alter table Customer Drop column Purchase_date 
Sp_Rename 'Customer.Purchase_ChangedType','Purchase_Date','Column' 
+0

Я запутался в вашем запросе, не возражаете, если я предоставил мне имя таблицы, имя столбца, чтобы помочь мне? Имя моей таблицы - это клиент и дата покупки имени моей колонки. – user3146242

+0

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

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