Как мы все упоминали в комментариях, сохранение даты в виде varchar
в базе данных является неправильной идеей.Теперь мы также знаем, что все даты должны быть последним днем месяца (из комментариев), поэтому теперь у нас есть с чем поработать.Таким образом, вы можете исправить вашу таблицу с помощью чего-то подобного приведенному ниже:
--Create a new column to store old values
ALTER TABLE YourTable ADD DateString varchar(10);
--Update the new column and change the existing column to ISO (yyyyMMdd) format
UPDATE YourTable
SET DateSting = DateColumn,
DateColumn = TRY_CONVERT(varchar(10), TRY_CONVERT(date, DateColumn, 101), 112);
--Change the data type of the datecolumn
ALTER TABLE YourTable ALTER COLUMN DateColumn date;
--Inspect "lost" data:
SELECT DateString
FROM YourTable
WHERE DateColumn IS NULL
AND DateString IS NOT NULL;
GO
--Add the CHECK CONSTRAINT
ALTER TABLE YourTable
ADD CONSTRAINT Date_EOMonth CHECK (DateColumn = EOMONTH(DateColumn));
Если не удается создать CHECK CONSTRAINT
, у вас есть даты, которые не на конец месяцаТаким образом, вы можете использовать приведенную ниже инструкцию для их проверки или инструкцию после того, как обновите их до конца месяца:
SELECT DateColumn
FROM YourTable
WHERE DateColumn != EOMONTH(DateColumn);
--Blanket Update
UPDATE YourTable
SET DateColumn = EOMONTH(DateColumn);