Как вернуть формат даты (например, мм / дд / гггг) из даты (например, 30.06.2009)? - PullRequest
0 голосов
/ 11 июня 2019

Я работаю над проверкой данных в базе данных SQL Server.Мне нужно проверить, заполнены ли даты в таблице в допустимом формате для указанной страны.

Есть ли в SQL какая-либо функция, которая будет возвращать формат даты из даты?

Например: Дата: 06/30/2019 Что мне нужно получить: мм / дд / гггг

Спасибо!

1 Ответ

2 голосов
/ 11 июня 2019

Как мы все упоминали в комментариях, сохранение даты в виде 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...