首页 > 解决方案 > 如何从日期(fe 06/30/2019)返回日期格式(fe mm/dd/yyyy)?

问题描述

我正在处理 SQL Server 数据库中的数据验证。我需要检查表中的日期是否以指定国家/地区的有效格式填充。

SQL 中是否有任何函数可以从日期返回日期格式?

例如:日期:06/30/2019我需要得到什么:mm/dd/yyyy

谢谢!

标签: sqlsql-servertsql

解决方案


正如我们在评论中提到的那样,将日期作为 a 存储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);

推荐阅读