如何从日期(例如2019年6月30日)返回日期格式(例如,mm / dd / yyyy)?

时间:2019-06-11 10:24:00

标签: sql sql-server tsql

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

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

例如:日期: 2019/06/30 我需要获得的信息: mm / dd / yyyy

谢谢!

1 个答案:

答案 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);