我正在SQL Server数据库中进行数据验证。 我需要检查表中的日期是否以指定国家/地区的有效格式填充。
SQL中是否有任何函数可以从日期返回日期格式?
例如:日期: 2019/06/30 我需要获得的信息: mm / dd / yyyy
谢谢!
答案 0 :(得分:2)
我们在注释中都提到过,将日期作为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
,则您的日期不是在月底,因此您可以使用以下语句检查它们,或者使用after语句将它们全部更新到最后。本月的
SELECT DateColumn
FROM YourTable
WHERE DateColumn != EOMONTH(DateColumn);
--Blanket Update
UPDATE YourTable
SET DateColumn = EOMONTH(DateColumn);