Дата вопроса с Sql Server - PullRequest
       7

Дата вопроса с Sql Server

0 голосов
/ 06 ноября 2011

У меня есть столбец varchar, который содержит дату в следующем формате

dd/mm/yyyy

Мне нужно преобразовать тип данных столбца в DATE.Я использую следующий запрос

alter table [tblDocumentRevision]
alter column [RevisionDate] date  null

, но я получаю сообщение об ошибке

Сообщение 241, Уровень 16, Состояние 1, Строка 1
Преобразование не выполнено при преобразовании даты и/ или время из символьной строки.
Оператор завершен.

Я уверен, что все значения имеют формат dd/mm/yyyy.Так почему же это дает мне ошибку?

Затем я добавил новый столбец и попытался

UPDATE [tblDocumentRevision]
SET NewDate = convert(date,[RevisionDate],103)
WHERE ISDATE([RevisionDate]) = 1

Проверка на ISDATE() = 1 должна отфильтровывать те записи, которые не могут быть преобразованы в DATE.

Тогда в столбце NewDate есть только значения, в которых месяц и дата меньше или равны 12, а остальные равны нулю.Итак, я ясно вижу проблему с форматом dd/mm/yyyy

Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2011

Я использовал Google, чтобы найти это . Попробуйте установить работающий формат ALTER COLUMN.

EDIT

CREATE TABLE #tmpTest
(
  MyCol VARCHAR(20)
);

INSERT INTO #tmpTest(MyCol)
  VALUES('31/12/99');

ALTER TABLE #tmpTest ALTER COLUMN MyCol DATE;

Урожайность:

Сообщение 241, Уровень 16, Состояние 1, Строка 9
Ошибка преобразования при преобразовании даты и / или времени из символьной строки.
Заявление было прекращено.

Принимая во внимание:

CREATE TABLE #tmpTest
(
  MyCol VARCHAR(20)
);

INSERT INTO #tmpTest(MyCol)
  VALUES('31/12/99');

SET DATEFORMAT DMY;

ALTER TABLE #tmpTest ALTER COLUMN MyCol DATE;

Урожайность:

(1 row(s) affected)
0 голосов
/ 06 ноября 2011

По умолчанию формат даты зависит от локали сервера.Поэтому вы не можете полагаться на него, используя формат DD/MM/YYYY, если явно не определяете это.

Ваш подход добавления нового столбца и использования CONVERT с правильным спецификатором стиля должен работать, но вы не можете проверить даты с помощью ISDATEфункция, потому что функция не будет знать о пользовательском стиле, который будет использоваться для анализа даты, если вы не измените формат точно, как показано в todda.speot.is.

UPDATE [tblDocumentRevision] SET NewDate = convert(date,[RevisionDate],103)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...